2015-12-13 23 views
2

我有這個XML文件,我需要獲得一本書的名稱和作者,其中至少有一位作者的名字以「E」開頭。Xpath - 同名的多個標籤,以子串開頭

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE library SYSTEM "knihy.dtd"> 
<library> 
<book isbn="0470114878"> 
    <author hlavni="hlavni">David Hunter</author> 
    <author>Jeff Rafter</author> 
    <author>Joe Fawcett</author> 
    <author>Eric van der Vlist</author> 
    <author>Danny Ayers</author> 
    <name>Beginning XML</name> 
    <publisher>Wrox</publisher> 
</book> 
<book isbn="0596004206"> 
    <author>Erik Ray</author> 
    <name>Learning XML</name> 
    <publisher>O'Reilly</publisher> 
</book> 
<book isbn="0764547593"> 
    <author>Kay Ethier</author> 
    <author>Alan Houser</author> 
    <name>XML Weekend Crash Course</name> 
    <year>2001</year> 
</book> 
<book isbn="1590596765"> 
    <author>Sas Jacobs</author> 
    <name>Beginning XML with DOM and Ajax</name> 
    <publisher>Apress</publisher> 
    <year>2006</year> 
</book> 
</library> 

我試過這種方法

​​

但在invokeTransform返回XPathException的:多個項目的順序是不允許作爲第一個參數開始,用()(「大衛·亨特」 ,「傑夫拉夫特」,...)。那我該如何檢查這個序列呢?

回答

3

由於錯誤信息顯示,使用starts-with()謂詞個人author元素,而不是通過所有author子元素starts-with()功能一次:

for $book in /library/book[author[starts-with(., "E")]] 
return $book 

xpathtester demo

以上將返回所有book s,其中至少爲o的名稱author的ne從"E"開始。

輸出:

<book isbn="0470114878"> 
    <author hlavni="hlavni">David Hunter</author> 
    <author>Jeff Rafter</author> 
    <author>Joe Fawcett</author> 
    <author>Eric van der Vlist</author> 
    <author>Danny Ayers</author> 
    <name>Beginning XML</name> 
    <publisher>Wrox</publisher> 
</book> 

<book isbn="0596004206"> 
    <author>Erik Ray</author> 
    <name>Learning XML</name> 
    <publisher>O'Reilly</publisher> 
</book> 
+1

權,並簡化爲'/庫/書[作者[開始-用( 「E」。)]]',which'll使用XPath 1.0工作太。 – kjhughes

+0

謝謝,我編輯了return語句。我不得不退還$ kniha in/knihovna/kniha [autor [starts-with(。,「E」)]]這個書的作者=> return $ kniha/autor/concat(。,「 - 」 ,$ kniha/nazev) – Arcane