[英]How to get value with JXPathContext if xmlns specified?
final SAXBuilder builder = new SAXBuilder();
final Document xml = builder.build( file );
final Element root = (Element) xml.getRootElement();
Element child = root.getChild("Header", Namespace.getNamespace("http://www.editeur.org/icedis/claims"));
final XPathContext ctx = XPathContext.create(root);
這是我的代碼。 XPathContext只是JXPathContext的包裝。 如您所見,“子級”變量與命名空間一起使用構造,如果我將其刪除,該變量將無效。
但是現在我正試圖像這樣用XPath從XML中獲得價值
ctx.getValue("/Header/SentDateTime")
而且,當然它總是返回null。 看來解決方案很簡單,但我無法在互聯網上找到它。 如果我從XML文件中刪除xmlns,一切都會起作用,但這不是一個選擇。 那么我應該如何使用這個xml?
另外,XML文件的簡短版本:
<?xml version="1.0" encoding="UTF-8"?>
<ICEDISClaimMessage version="0.1" xmlns="http://www.editeur.org/icedis/claims">
<Header>
<Sender>
<SenderIdentifier>
<SenderIDType>06</SenderIDType>
<IDValue>1234567890128</IDValue>
</SenderIdentifier>
<SenderName>Apogee Agency</SenderName>
</Sender>
<Addressee>
<AddresseeIdentifier>
<AddresseeIDType>06</AddresseeIDType>
<IDValue>2345678901237</IDValue>
</AddresseeIdentifier>
</Addressee>
<MessageNumber>111</MessageNumber>
<SentDateTime>20101001</SentDateTime>
<MessageNote>Sample file 1: a claim made by an agent to a publisher for a journal issue not yet delivered</MessageNote>
</Header>
</<ICEDISClaimMessage>
您需要將XPath表達式與名稱空間上下文一起使用。 它必須看起來像這樣:
final XPathContext ctx = XPathContext.create(root);
ctx.addNamespaceMapping("ns", "http://www.editeur.org/icedis/claims");
... = ctx.getValue("/ns:Header/ns:SentDateTime");
注意:我不知道JXPath是否支持名稱空間,如果支持,則如何設置。
而且,順便說一句,您似乎正在使用JDOM(SAXBuilder)。 在那種情況下,我建議使用XPath函數內置的JDOM而不是構建包裝器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.