如何在 svg createElement 步骤中停止创建 xmlns 属性
How to stop xmlns attribute from being created during svg createElement step
我正在尝试将背景框添加到 SVG 文档中的文本标签。该过程运行正常,除了 svg.createElement 步骤还在我的 XML 文件中创建一个条目,如下所示 xmlns=""
此条目似乎导致我的 SVG 文件 (XML) 无法在我的 JSVG canvas 上正确显示。如果我手动编辑文件并删除此条目,则 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 版
如有任何帮助,我们将不胜感激。
生成 xmlns="" 命名空间声明是因为您选择将元素放在 null 命名空间中。
Element backBox = svg.createElementNS(null,"rect");
如果您在 SVG 命名空间中创建元素,一切都应该没问题。
我正在尝试将背景框添加到 SVG 文档中的文本标签。该过程运行正常,除了 svg.createElement 步骤还在我的 XML 文件中创建一个条目,如下所示 xmlns=""
此条目似乎导致我的 SVG 文件 (XML) 无法在我的 JSVG canvas 上正确显示。如果我手动编辑文件并删除此条目,则 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 版
如有任何帮助,我们将不胜感激。
生成 xmlns="" 命名空间声明是因为您选择将元素放在 null 命名空间中。
Element backBox = svg.createElementNS(null,"rect");
如果您在 SVG 命名空间中创建元素,一切都应该没问题。