java - 如何阻止在 svg createElement 步骤期间创建 xmlns 属性

标签 java xml dom svg batik

我正在尝试将背景框添加到 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 命名空间中创建元素,一切都应该没问题。

关于java - 如何阻止在 svg createElement 步骤期间创建 xmlns 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42144353/

相关文章:

java - Android DatePicker 对话框,日期应该来自明天

java - 我如何在这里创建此方法的实例?

java - JDK DOM 解析器 : Why Factories?

xml - 使用 golang 解析 tei XML

java - 使用 DOM 解析 xml,DOCTYPE 被删除

javascript - 根据不为零的变化计算事件数

javascript - 动态插入的包含文本的 div 的宽度

java - 用 Switch 打击,降低圈复杂度 java

java - 主屏幕上的 JFrame 复制

c# - XML 列输出