2017-03-03 156 views
1

考慮下面的XML文檔:的XPath:選擇根,過濾子元素

<inst> 
    <ins> 
    <id>id_01</id> 
    <pos>1</pos> 
    </ins> 
    <ins> 
    <id>id_02</id> 
    <pos>1</pos> 
    </ins> 
</inst> 

我試圖讓下面的輸出:

<inst> 
    <ins> 
    <id>id_01</id> 
    <pos>1</pos> 
    </ins> 
</inst> 

我寫了下面的XQuery/XPath的表達式:

doc('database/data.xml')/inst[ins/id='id_01']

這不會給想要的結果,但誰樂文件,就好像沒有過濾條件會在那裏。但如果我把ID所不存在的XML的文檔,結果是空的。

我只是不知道這個說法有什麼問題。

回答

1

你寫的XPath的,

/inst[ins/id='id_01'] 

說,選擇包含有一個子元素,其字符串值是"id_01"一個ins子元素inst根元素。由於您的XML的根確實符合這一標準,它被選中:

<inst> 
    <ins> 
    <id>id_01</id> 
    <pos>1</pos> 
    </ins> 
    <ins> 
    <id>id_02</id> 
    <pos>1</pos> 
    </ins> 
</inst> 

你也可以使用這個XPath,

/inst/ins[id='id_01'] 

僅選擇這個XML,

<ins> 
    <id>id_01</id> 
    <pos>1</pos> 
</ins> 

然而,沒有任何的XPath,你似乎想要做的是將選擇根元素沒有第二ins元素。原因是XPath是選擇,而不是XML的轉換。 。在你的XML沒有inst元素可以選擇缺少第二(id_02ins元素。如果您想要轉換XML,請改爲使用XSLT。

-1

你可以寫東西喜歡 -

<inst>{doc('database/data.xml')/inst/ins[id eq "id_01"]}</inst>
的 「值比較」 操作符(EQ,LT等)的設計比較單一的價值觀,所以最好使用 'EQ'