2016-08-30 56 views
1

我正在看W3學校網站中的示例,他們能夠通過對price元素施加條件來顯示標題元素值。XPath使用local-name()函數未選擇XML子元素

使用沒有名稱空間的XPATH表達式。

/bookstore/book[price>35]/title 

然而,當我改變了相同的XML有命名空間和author元素強加條件顯示價格元素的值,我看到異常。下面是帶命名空間的XPATH表達式。

/*[local-name()='bookstore']/*[local-name()='book'[local-name()='author' and text()='Giada De Laurentiis']]/*[local-name()='price'] 

它與例外

Exception in thread "main" javax.xml.transform.TransformerException: ERROR! Unknown op code: 21 
    at com.sun.org.apache.xpath.internal.compiler.Compiler.error(Unknown Source) 
    at com.sun.org.apache.xpath.internal.compiler.OpMap.getFirstPredicateOpPos(Unknown Source) 
    at com.sun.org.apache.xpath.internal.axes.WalkerFactory.analyzePredicate(Unknown Source) 

能否請你讓我知道什麼是錯的有命名空間XPATH表達式失敗?

與XML命名空間

<?xml version="1.0" encoding="UTF-8"?> 
<bk:bookstore xmlns:bk = "http://www.example.com/" xmlns:typ = "http://www.example.com/types"> 
<bk:book category = "COOKING"> 
    <typ:title lang = "en">Everyday Italian</typ:title> 
    <typ:author>Giada De Laurentiis</typ:author> 
    <typ:year>2005</typ:year> 
    <typ:price>30.00</typ:price> 
</bk:book> 
<bk:book category = "CHILDREN"> 
    <typ:title lang = "en">Harry Potter</typ:title> 
    <typ:author>J K. Rowling</typ:author> 
    <typ:year>2005</typ:year> 
    <typ:price>29.99</typ:price> 
</bk:book> 
<bk:book category = "WEB"> 
    <typ:title lang = "en">XQuery Kick Start</typ:title> 
    <typ:author>James McGovern</typ:author> 
    <typ:year>2003</typ:year> 
    <typ:price>49.99</typ:price> 
</bk:book> 

回答

1

你真的不應該繞開命名空間以這種方式,但如果你堅持,這裏是一個local-name()基於XPath,線,打破了可讀性,選擇price元素的book其爲"Giada De Laurentiis"bookstore元素:

/*[local-name()='bookstore'] 
/*[local-name()='book' and *[local-name()='author' and .='Giada De Laurentiis']] 
/*[local-name()='price'] 
+0

謝謝你現在在工作。 – satish