2017-02-09 41 views
0

我试图在SVG文档的文本标签中添加一个背衬框。这个过程工作正常,除了svg.createElement步骤也在我的XML文件中创建一个条目像这样xmlns=""如何停止在svg createElement步骤中创建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"/> 

所以,问题是我怎么能阻止被添加到我的SVG XML输出文件的这个属性(xmlns="")?

我试图通过代码来调试,但我不能看行之后创建的属性“的xmlns”,

元背箱= svg.createElementNS(NULL,“矩形”);

我试图执行removeAttribute步骤,但这没有奏效(因为我找不到xmlns属性)。

我使用Apache蜡染版本1.8

任何帮助将非常感激。

回答

3

xmlns =“”命名空间声明是由于您选择将您的元素置于空名称空间而生成的。

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

如果你在SVG命名空间中创建你的元素,一切都会好的。

+0

嗨迈克尔 - 你的答案奏效。我按照您的建议更改了该行, Element backBox = svg.createElementNS(“http://www.w3.org/2000/svg”,“rect”); 并且该属性从我的输出中消失了,不仅如此,而且我使用的JSVGCanvas原始问题还没有使用更新后的Dom进行刷新,现在正在运行。所以我很开心。 非常感谢您的帮助。我一直在为此挣扎好几天。 – robbie70