XML xpath,获取root元素的子元素

时间:2017-05-23 09:45:28

标签: java xml xpath docx4j

例如,提供了XML。

      <?xml version="1.0" encoding="utf-8"?>
      <store d:mi="22">
           <book price="12.99" d:price="Number" d:mi="4">
                  <title d:constr="String" d:mi="1">Sword of Honour</title>
                  <category d:constr="String" d:mi="2">fiction</category>
                  <author d:constr="String" d:mi="3">Evelyn Waugh</author>
           </book>
           <book price="8.99" d:price="Number" d:mi="9">
               <sublist>
                  <title d:constr="String" d:mi="5">Moby Dick</title>
                  <category d:constr="String" d:mi="6">fiction</category>
                  <author d:constr="String" d:mi="7">Herman Melville</author>
                  <isbn d:constr="String" d:mi="8">0-553-21311-3</isbn>
               </sublist>
           </book>
           <Note price="8.95" d:price="Number" d:mi="13">
                  <title d:constr="String" d:mi="10">50</title>
                  <category d:constr="String" d:mi="11">reference</category>
                  <author d:constr="String" d:mi="12">Nigel Rees</author>
           </Note>
           <Note price="22.99" d:price="Number" d:mi="18">
                  <title d:constr="String" d:mi="14">The Lord of the Rings</title>
                  <category d:constr="String" d:mi="15">fiction</category>
                  <author d:constr="String" d:mi="16">J. R. R. Tolkien</author>
                  <isbn d:constr="String" d:mi="17">0-395-19395-8</isbn>
           </Note>
      </store>

使用下面的Xpath,我可以获得商店元素。

   String name = "String";
   String xpath = "//title[@d:constr='" + name + "']/parent::store";

但我们需要得到书(我们不知道的任何东西),这是商店的孩子(常数字)。有可能吗?

1 个答案:

答案 0 :(得分:0)

尝试使用以下表达式匹配所需title忽略节点名称的父级:

String name = "String";
String xpath = "//title[@d:constr='" + name + "']/parent::*";

另请注意store不是title的父级,您应该使用"//title/ancestor::store"代替"//title/parent::store"

如果你只想得到store的孩子:

//store/child::*

第一个孩子:

//store/child::*[1]