如何在svg createElement步骤中停止创建xmlns属性

时间:2017-02-09 18:33:07

标签: java xml dom svg batik

我正在尝试将一个支持框添加到SVG文档中的Text标签。除了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 ver 1.8

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

xmlns =&#34;&#34;生成名称空间声明是因为您选择将元素放在空名称空间中。

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

如果在SVG名称空间中创建元素,那么一切都应该很好。