Как остановить создание атрибута 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, все должно быть хорошо.