Как остановить создание атрибута 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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам