【问题标题】:XPath return empty value from string xmlXPath 从字符串 xml 返回空值
【发布时间】:2017-12-01 10:48:38
【问题描述】:

我有一个很大的 xml:

<SomeRequest>
<Reservation>
...
</Reservation>
<Payment>
<cardNumber>....</cardNumber>
</Payment>
</SomeRequest>

现在我想从此 xml 中获取 cardNumber 值。它是字符串,我无法将其解析为 xml Document,因为它需要太多时间。 所以,我有这个string,我在上面使用XPath,如下所示:

String field = "/SomeRequest/Payment/cardNumber/text()";
XPathExpression compile = XPATH_FACTORY.newXPath().compile(field);
String value = compile.evaluate(new InputSource(new StringReader(request))); //request is xml string

但是在这样做之后,value 是空的。我试图在 xml Document 上做它(解析它)然后它工作了。但现在我想在简单的String 上做这件事。 我不想在这个字符串上使用正则表达式,因为它会带来很多问题。 如何使用 XPath 获得这个 cardNumber 值?

【问题讨论】:

    标签: java xml string xpath


    【解决方案1】:

    你是在正确的方式,这是有效的

    public class XpathTest {
        private XPathFactory XPATH_FACTORY = new XPathFactoryImpl();
    
        private String request = "<SomeRequest>\n" +
                "<Reservation>\n" +
                "...\n" +
                "</Reservation>\n" +
                "<Payment>\n" +
                "<cardNumber>123</cardNumber>\n" +
                "</Payment>\n" +
                "</SomeRequest>";
    
        @Test
        public void name() throws Exception {
            String field = "/SomeRequest/Payment/cardNumber/text()";
            XPathExpression compile = XPATH_FACTORY.newXPath().compile(field);
            String value = compile.evaluate(new InputSource(new StringReader(request)));
            assertThat(value, equalTo("123"));
        }
    }
    

    【讨论】:

    • @allocer 请检查路径。 “SomeRequest”是根标签吗?
    • 是的。我有String field = "/SomeRequest/Payment/cardNumber/text()";
    • 我可能只建议检查路径和源 xml。标签名称区分大小写。玩测试,直到找到原因。
    • 好的,我试试。谢谢。
    【解决方案2】:

    您可以在Document 上使用toString

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多