【问题标题】:How to search for child nodes in xml using DOM Java如何使用 DOM Java 在 xml 中搜索子节点
【发布时间】:2014-12-09 13:29:03
【问题描述】:

我有以下 XML 结构

<CodeSnippet>
<Code id="code1">
<Tags>button java</Tags>
<Snippet>sample code</Snippet>
</Code>
<Code id="code2">
<Tags>eclipse jbutton java</Tags>
<Snippet>sample code</Snippet>
</Code>
<.....>
</CodeSnippet>

现在,当我使用标签进行搜索时,我想从上述 xml 中检索所有 Snippet。例如,如果搜索“java”,那么所有包含“java”标签的节点都必须返回 sn-p。

我的搜索查询是:

//Code/Tags[contains(concat(' ',/text(),' '), ' "+ searchTags[0] +" ')]";

这里,searchTags[0] 包含“java”。

我的结果集应该包含所选节点的片段,即来自上述 xml 结构的 code1 和 code2。

【问题讨论】:

    标签: java xml dom xpath


    【解决方案1】:

    试试这个表达式:

    //Code/Tags[contains(., 'Java')]/../Snippet
    

    【讨论】:

    • @dfsq...请再次查看我的问题。我已经更正了。
    • 答案仍然适用。以上 XPath 将检索 Snippet 节点 Tags 包含“Java”。
    • @dfsq..是的,我可以用你的表情检索“标签”,但我无法检索“片段”。我只是在执行你的表情而不改变。
    • 奇怪。如果您尝试//Code/Tags[contains(./text(), 'Java')]/parent::Code/Snippet 会怎样?
    • 如果我像 //Code/Tags/text()[contains(., 'Java')] 这样写,我可以检索“标签”。为了获得“片段”,我尝试了 //Code/Tags/text()[contains(., 'Java')]/../Snippet/text()。但没有成功。
    【解决方案2】:

    为了检索所有包含“java”的“标签”,我使用了下面的 xpath 表达式,

    //代码/标签/文本()[包含(., 'java')]

    为了检索与标签“java”相关的所有“Snippet”,我使用了下面的表达式

    //代码/标签[contains(./text(), 'java')]/parent::Code/Snippet/text()

    感谢@dfsq 帮助我解决他的表达问题。非常感谢。

    【讨论】:

      【解决方案3】:

      你可以写:

      //Tags//Snippet
      

      如果你使用 XPath

      【讨论】:

      • 我已经发布了我正在寻找的上下文的答案。请看一看。如果我不想使用标签进行任何搜索,而只是获取 sn-p,那么您的权利。
      猜你喜欢
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多