java - xpath 在一次调用中解析多个值

标签 java xml xpath

如何在一次调用中获取多个路径的 xPath 值。

例如

<Message version="010" release="006"  xmlns="http://www.ncpdp.org/schema/SCRIPT" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
</Header>
<Body>
    <CommunicationNumbers>
        <Communication>
            <Number>5551234444</Number>
            <Qualifier>TE</Qualifier>
        </Communication>
        <Communication>
            <Number>5551235555</Number>
            <Qualifier>FX</Qualifier>
        </Communication>
    </CommunicationNumbers>
    <Identification>
        <FileID>616</FileID>
        <DEANumber>AB123456</DEANumber>
        <SocialSecurity>123456789</SocialSecurity>
    </Identification>
    <Specialty>A</Specialty>
    <ClinicName>Therapy Department</ClinicName>
    <Name>
        <LastName>Xavior</LastName>
        <FirstName>Charles</FirstName>
        <MiddleName>C</MiddleName>
        <Suffix>MD</Suffix>
    </Name>
    <Address>
        <AddressLine1>888 ABC Drive</AddressLine1>
        <AddressLine2>Suite 200</AddressLine2>
        <City>Miami</City>
        <State>FL</State>
        <ZipCode>12345</ZipCode>
    </Address>
</Body>

我需要以下值:

:通讯/号码 :标识/文件ID :专业

在一次通话中。

我使用的是单个值

 public static String getExpValue(final String xmlString, final String expression, final ServiceNamespaceContext nameSpace) throws XPathExpressionException {
    StringReader strReader = new StringReader(xmlString);
    InputSource inputStr = new InputSource(strReader);
    String result = null;
    try {
        final XPath xpath = XPathFactory.newInstance().newXPath();
        xpath.setNamespaceContext(nameSpace);

        final XPathExpression expr = xpath.compile(expression);
        result = (String) expr.evaluate(inputStr, XPathConstants.STRING);
    } finally {
        strReader = null;
        inputStr = null;
    }
    return result;
}

我想要的输出是一个连接的字符串 5551234444616A

最佳答案

你可以尝试使用类似...

XPathExpression expr = xpath.compile("//Communication/Number | //Identification/FileID");

应该结合每个查询的结果。在我的(简单)测试中,我得到了 3 个匹配项(2 个用于 Communication/Number,1 个用于 Identification/FileID)

已更新

预期的结果是返回一个 NodeList,例如...

NodeList nl = (NodeList)expr.evaluate(inputStr, XPathConstants.NODELIST);
for (int index = 0; index < nl.getLength(); index++) {
    Node node = nl.item(index);
    String value = node.getTextContent();
    System.out.println(value);
}

关于java - xpath 在一次调用中解析多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24544229/

相关文章:

java - 检测循环引用

java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi?

xml - Akka 远程 `system.shutdown()` 导致 EndpointDisassociatedException?

xmlstarlet:过滤掉具有属性的元素

xml - "The prefix ' 增值税 ' in XPath cannot be resolved"验证 XML 架构实例时

java - 将图像转换为二维数组仅获取左上象限

java - 提供的节点名或servname,或者Java未知

xml - PyXB 和 python 框架

c - Webkit webkit_dom_document_evaluate 函数文档

XPath - 基于多个子选择选择父节点