在Java中,当我尝试创建一个新的InputSource并将其交给一个ByteArrayInputStream时,它既不创建CharacterStream,也不创建编码集。
XPathExpression compilablePath = xpath.compile("/OutputRoot/Output/AuthPlus/DataMatches/NoAgePri");
String result = compilablePath.evaluate(
new InputSource(new StringReader(xml))
);
if (!"".equals(result)) {
this.noAgePri = Integer.parseInt(result);
}我正在做上面的工作,其中xml是作为字符串存储的有效XML。XML本身如下所示。
<?xml version="1.0" encoding="utf-16"?>
<OutputRoot>
<Output>
<Control>
<Reference>ZX1J49CKQ4</Reference>
</Control>
<AuthPlus>
<ApplicantIdentifier>1</ApplicantIdentifier>
<AuthPlusRef />
<IACA>
<NoPriItem>12</NoPriItem>
<StrtOldPri>199402</StrtOldPri>
<NoSecItem>4</NoSecItem>
<NoSecSrc>1</NoSecSrc>
<StrtOldSec>201608</StrtOldSec>
</IACA>
<AOCA>
<NoPriItem>1</NoPriItem>
<StrtOldPri>200910</StrtOldPri>
<NoSecItem>1</NoSecItem>
<NoSecSrc>1</NoSecSrc>
</AOCA>
<IAPA>
<NoPriItem>0</NoPriItem>
<NoSecItem>0</NoSecItem>
<NoSecSrc>0</NoSecSrc>
</IAPA>
<AOPA>
<NoPriItem>0</NoPriItem>
<NoSecItem>0</NoSecItem>
<NoSecSrc>0</NoSecSrc>
</AOPA>
<DataMatches>
<NoAgePri>10</NoAgePri>
</DataMatches>
<Decision>
<DecCode>AU01</DecCode>
<DecText>The Applicant has been Authenticated to your required 'Level 1'</DecText>
<AuthIndex>80</AuthIndex>
<AuthText>A high level of Authentication has been found for the identity supplied</AuthText>
<IDConfLvl>1</IDConfLvl>
<IDConfText>The identity supplied has been confirmed at the required 'Level 1'</IDConfText>
<HighRiskCount>0</HighRiskCount>
</Decision>
</AuthPlus>
</Output>
</OutputRoot>结果是result是一个空字符串,因此没有设置noAgePir。
提前感谢您的帮助。
固定.
谢谢你的帮助--主要问题是我正在使用的XPath。由于某些原因,XML文件并不认为Output是一个有效的标记--只有在我执行/OutputRoot/child::node()[2]/AuthPlus/DataMatches/NoAgePri操作时才会这样做。
仍然不知道为什么,但至少起作用了。
发布于 2016-10-18 14:45:48
您的XPath表达式的结果是空的,因为您的路径是错误的:您省略了步骤AuthPlus。
你需要运用分而治之的方法来解决这样的问题。您可以通过使用一个简单的XPath表达式来检查API调用是否正确,还可以通过在XPath测试工具(例如oXygen)中尝试来检查您的API调用是否正确。您似乎已经对错误的原因作出了结论,而没有首先考虑最简单的可能性。
(话虽如此,如果xml是字符串,那么您应该使用StringReader,而不是将其转换为字节,这样XML解析器就可以将其转换回字符串。)
https://stackoverflow.com/questions/40110698
复制相似问题