xml
  • xpath
  • saxon
  • 2015-02-09 26 views 0 likes 
    0

    我試圖運行通過撒克遜的XPath,我有以下文件:的XPath返回錯誤的布爾結果

    <ServiceContext> 
        <userName>admin</userName> 
    </ServiceContext> 
    

    然後我加載到XdmItem名爲doc,然後我運行下面的查詢

    XPathExecutable expr = compiler.compile("/ServiceContext/userName/text()='admin'") 
    final XPathSelector selector = expr.load(); 
    selector.setContextItem(doc); 
    final boolean value = selector.effectiveBooleanValue(); 
    

    它應該返回true,但由於某種原因它返回false,有人知道這裏有什麼錯嗎?

    謝謝!

    +1

    這應該工作。要查看實際值是什麼(你希望是「admin」),你可以嘗試'compiler.compile(「/ ServiceContext/userName/text()」)',然後輸出值'final String value = selector.effectiveStringValue()' – geert3 2015-02-09 16:19:48

    +0

    不,我看不到這裏有什麼問題。我懷疑這是代碼中沒有顯示給我們的東西。您是否嘗試過從XQuery命令行執行表達式? – 2015-02-10 16:33:51

    +0

    是的,它與一段未顯示的代碼有關,編譯器有錯誤的URN設置 – jonatzin 2015-02-11 13:42:00

    回答

    0

    我不知道撒克遜人,但使用現成的javax.xml類,它按預期工作。

    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    
    XPathFactory factory = XPathFactory.newInstance(); 
    XPath xpath = factory.newXPath(); 
    
    Document d = builder.parse(new ByteArrayInputStream("<ServiceContext>\n<userName>admin</userName>\n</ServiceContext>".getBytes())); 
    String value = xpath.evaluate("/ServiceContext/userName/text()='admin'", d); 
    

    value包含true。 也許升級您的撒克遜或切換到javax.xml

    相關問題