如何在一次调用中获得多个路径的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>
我需要以下值:
:通信/数 :识别/写到FileID :特色
一次通话。
对于我正在使用的单个值
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
答案 0 :(得分:4)
您可以尝试使用类似......
的内容XPathExpression expr = xpath.compile("//Communication/Number | //Identification/FileID");
哪个应该结合每个查询的结果。在我的(简单)测试中,我得到了3场比赛(Communication/Number
为2,Identification/FileID
为1)
<强>更新强>
预期的结果是返回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);
}
答案 1 :(得分:1)
从Java 7开始,NodeList被NodeSet取代:
NodeList nl = (NodeList)expr.evaluate(inputStr, XPathConstants.NODESET);
for (int index = 0; index < nl.getLength(); index++) {
Node node = nl.item(index);
String value = node.getTextContent();
System.out.println(value);
}