【问题标题】:Getting the text content of an XML element without getting the text content of its child nodes获取 XML 元素的文本内容而不获取其子节点的文本内容
【发布时间】:2015-02-20 15:51:46
【问题描述】:

我正在尝试将 SVG 格式的图像导入到我正在使用的软件中。 例如,我有一个这样的 SVG:

<svg height="100" width="100">
    <text>I Love SVG!
        <tspan> NOT! </tspan>"
    </text>
</svg>

当处理“文本”元素这个数据时,我有 TextString=“element.getTextContent()”。这使得 TextString = "I Love SVG! NOT!"当我想要的只是“我爱 SVG!”。因此,当我不想包含子元素文本时,getTextContent 方法会从元素及其子元素返回文本。

有没有一种简单的方法可以只获取元素的文本内容而不获取子节点文本?谢谢

【问题讨论】:

标签: java xml text svg


【解决方案1】:

您可以使用element.getChildNodes() 遍历元素的子节点。任何具有Node.TEXT_NODE 节点类型的节点都是文本节点(通常会有多个)。

String textContent = "";
NodeList childNodes = element.getChildNodes();
for (int i = 0; i < childNodes.length(); i++) {
    Node n = childNodes.item(i);
    if (n.getNodeType() == Node.TEXT_NODE) {
       textContent += n.getNodeValue();
    }
}

【讨论】:

  • 好的,但我希望原始文本元素的文本内容只有其元素的文本,而不是其子元素(例如,文本的 TextString 值为“我爱 SVG!”,和 tspan 的 TextString 为“不是!”
  • @DirtyProgrammer 是的,这正是我向您展示的方法。您示例中的 text 元素有两个作为文本节点的子节点。一个是包含I Love SVG! 和一些空格的文本节点,另一个是包含" 和一些空格的文本节点(可能" 只是一个错字)。由于可能有多个,因此您应该遍历它们,去除空白,并根据需要将它们连接在一起。
  • 如果我连接它们会发生什么我会得到字符串:“我爱 SVG!NOT!NOT!”
  • @DirtyProgrammer 您是否包含了if (n.getNodeType() == Node.TEXT_NODE) 部分?
【解决方案2】:

找到解决我的问题的方法,感谢 JLRishe 和 kulatamicuda 的建议。

而不是 TextString = element.getTextContent() (从所有子节点以及原始文本节点获取文本)

我使用了 TextString = element.getFirstChild().getTextContent()。

使用它时,我确保第一个子节点实际上是一个文本节点,而不是这样的:

<text><tspan>tspan text</tspan></text>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    相关资源
    最近更新 更多