【问题标题】:java xpath textjava xpath 文本
【发布时间】:2012-12-10 19:03:29
【问题描述】:

我有点卡在 XPath 和/或 Java 上。我有如下 XML 文档结构:

<document>
  <text>
    <headline>This is the text's headline</headline>
    This is the text.
  </text>
 </document>

我需要的是这个:

<document>
  <text>
    <headline>This is the text's headline</headline>
    <w>This</w>
    <w>is</w>
    <w>the</w>
    <w>text</w>
    <w>.</w>
  </text>
 </document>

我怎么能改变文本节点的文本内容,同时保持标题节点不变?! (我正在使用 org.jdom2.xpath。)

鲍勃

【问题讨论】:

  • 您希望对读取的 XML 进行结构更改。我相信您需要一些 XSL(T) 来实现这一点——XPath 主要用于查询 XML。例如,请参阅<xsl:element> XSL 标记以在输出 XML 中创建新元素。或者,您可以 XPath 选择“这是文本。”,在 Java 中将其分解,使用 JDOM 重新组合,然后输出所需的 XML。
  • 我不确定您回复的第二部分。我的问题不是打破“这是文本。”,而是保持标题节点到位。
  • XPath 用于选择 XML 节点并计算有关这些节点的内容。请参阅en.wikipedia.org/wiki/XPath 的前两行。您不能在 XPath 中创建那些 &lt;w&gt; 节点。
  • Xpath 是一种用于 XML 文档的 查询 语言——它不能更改 XML 文档(创建或删除节点)。 XSLT 是一种专门为 XML 转换而创建的语言。使用 XSLT 解决像您这样的任务是微不足道的。如果您需要 XSLT 解决方案,请注明。
  • 大家好,感谢您的回复。我不得不承认 XSLT 对我来说是全新的。我的想法(显然行不通)是这样的:node.setText(""); for (int i = 0; i &lt; words.size(); i++) { Element child = new Element("w"); child.setText(words.get(i)); node.addContent(child); } 但是,这也会删除标题节点(我不太明白)。如果有人可以帮助我处理 XSLT,我将不胜感激。

标签: java xpath


【解决方案1】:

由于您需要清除&lt;text&gt; 的文本内容并且设置(空)文本会删除所有其他内容,您可以先克隆&lt;headline&gt; 元素,并在使用setText() 后将其添加回来。然后继续循环并创建 &lt;w&gt; 元素。

对于 XPath,您可以选择 &lt;heading&gt; 元素

/document/text/heading

&lt;text&gt;元素的文本内容

/document/text/text()

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多