2017-02-09 9 views
0

Я пытаюсь добавить ящик для текста в текстовую метку в документе SVG. Процесс работает нормально, за исключением того, что шаг svg.createElement также создает запись в моем XML-файле, подобном этому xmlns=""Как остановить атрибут xmlns от создания во время svg createElement шаг

Эта запись, кажется, заставляет мой SVG-файл (XML) отображаться неправильно на моем холсте JSVG. Если я вручную отредактирую файл и удалю эту запись, тогда XML отобразится правильно.

Ниже приведен фрагмент кода.

if(domElement instanceof SVGOMTextElement) { 
      SVGOMTextElement text = (SVGOMTextElement) domElement; 
      NodeList tspans = text.getElementsByTagName("tspan"); 
      for(int i = 0; i < tspans.getLength(); i++){ 
      Node node = tspans.item(i); 
      SVGOMTSpanElement tspan = (SVGOMTSpanElement) node; 
      Element backBox = svg.createElementNS(null,"rect"); 
      backBox.setAttributeNS(null,"id", "backingRect-attx" + String.valueOf(Math.round(tspan.getExtentOfChar(0).getX())) + "atty" + String.valueOf(Math.round(tspan.getExtentOfChar(0).getY()))); 
      backBox.setAttributeNS(null,"width", String.valueOf(tspan.getComputedTextLength())); 
      backBox.setAttributeNS(null,"height", String.valueOf(tspan.getExtentOfChar(0).getHeight())); 
      backBox.setAttributeNS(null,"style", "fill:green;fill-opacity:0.5"); 
      backBox.setIdAttributeNS(null,"id", Boolean.TRUE); 

      text.getParentNode().insertBefore(backBox, text); 
    } 

XML-тег, который этот код генерирует будет показан ниже,

<rect xmlns="" width="59.89038" style="fill:yellow;fill-opacity:0.5" 
id="backingRect-attx407atty427" height="16.734436"/> 

Таким образом, вопрос, как я могу остановить этот атрибут (xmlns="") от добавления в моем SVG вывод XML-файл?

Я пытался отладки через код, но я не могу видеть атрибут «Xmlns» создана после того, как линии,

Элемент backBox = svg.createElementNS (нуль, «Прямоугольник»);

Я пытался выполнить шаг removeAttribute, но это не сработало (поскольку я не смог найти атрибут xmlns).

Я использую Apache Batik версии 1.8

Любая помощь будет оценена.

ответ

3

Объявление пространства имен xmlns = "" генерируется, потому что вы решили поместить свой элемент в нулевое пространство имен.

Element backBox = svg.createElementNS(null,"rect"); 

Если вы создаете свой элемент в пространстве имен SVG, все должно быть хорошо.

+0

Привет, Майкл - ваш ответ сработал. Я изменил линию, как вы предложили, Элемент backBox = svg.createElementNS («http://www.w3.org/2000/svg», «rect»); и атрибут исчез из моего вывода, и не только это, но и исходная проблема, с которой я столкнулся с JSVGCanvas, не обновляющимся с моим обновленным Dom, теперь работает. Поэтому я очень счастлив. Большое спасибо за помощь. Я боролся с этим в течение нескольких дней. – robbie70