【问题标题】:Getting a node and its specific sub node获取节点及其特定子节点
【发布时间】:2019-06-17 19:41:06
【问题描述】:

我正在尝试获取一个节点和特定的子节点。假设我有以下 XML。

<?xml version="1.0" encoding="UTF-8"?>
<book>
<person>
  <property>number one</property>
  <csvname>
     <name>one</name>
   </csvname>
  <first>Yash</first>
  <last>M</last>
  <age>22</age>
</person>
<person>
  <property>number two</property>
  <csvname>
     <name>two</name>
   </csvname>
  <first>Bill</first>
  <last>Gates</last>
  <age>46</age>
</person>
<person>
  <property>number three</property>
  <csvname>
     <name>three</name>
   </csvname>
  <first>Steve</first>
  <last>Jobs</last>
  <age>40</age>
</person>
</book>

我想获得根元素以及匹配的人元素(假设人有 name=one ),即输出如下:

<person>
  <property>number one</property>
</person>

如何使用 Java xpath 获得以上输出。

我尝试了几个 xpath 表达式,但没有运气。

【问题讨论】:

    标签: java xml xpath domxpath


    【解决方案1】:

    这里是 xpath。

     //name[.='one']/ancestor::person
    

    截图:

    【讨论】:

    • 感谢您的快速回复。 @supputuri。你的 xpath exp 正在获取 person 的所有其他子元素(它们是 csvname、first、last 和 age),这是我不想要的。
    • 哦,好的。所以你只想要人物和财产节点?
    • 请。我只是在寻找人物和财产节点
    • //person[.//name[.='one']]/*[local-name()='property'] 是只提供财产的人,我会在以后跳上这个。
    • AFAIK,没有直接的 xpath 可以让您获得父母和特定的孩子。 Option1: 您可以尝试按照答案中的说明获取父节点,然后从 xpath 输出中删除不需要的节点。 Option 2: 如果您确定&lt;person&gt; 没有任何属性,那么您可以将来自//person[.//name[.='one']]/*[local-name()='property'] 的子节点包装在自定义person 标记中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多