Как остановить создание атрибута xmlns на этапе svg createElement

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

Эта запись, по-видимому, приводит к тому, что мой файл 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(null,"rect");

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

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

Любая помощь приветствуется.


person robbie70    schedule 09.02.2017    source источник


Ответы (1)


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

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

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

person Michael Kay    schedule 09.02.2017
comment
Привет, Майкл - твой ответ сработал. Я изменил строку, как вы предложили, Element backBox = svg.createElementNS(w3.org/2000/ svg, прямоугольник); и атрибут исчез из моего вывода, и не только это, но и исходная проблема, с которой я столкнулся, когда JSVGCanvas не обновлялся с моим обновленным Домом, теперь работает. Так что я очень счастлив. Большое спасибо за Вашу помощь. Я боролся с этим в течение нескольких дней. - person robbie70; 10.02.2017