簡體   English   中英

如果指定了xmlns,如何使用JXPathContext獲取值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM