Javaでは、新しいInputSource
を作成して手にしたときにByteArrayInputStream
という文字列が生成されず、エンコードセットも生成されません。Javaの新しいInputSourceで文字ストリームが生成されない
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
が考慮されていませんでした。
まだ分かりませんが、それは少なくとも機能します。
記載してくださいあなたの質問の 'xml'の値。ここでは文字セットを使用する必要はありません。単に 'new InputSource(new StringReader(xml))'と書くことができます。 – VGR
XMLを含むように私の質問を編集しました。私が新しい 'StringReader(xml)'を試してみると、XPathは空の文字列しか返さないことを示唆しています。 – MPhil123
XPath式に 'Output/DataMatches'が含まれていますが、DataMatchesはOutputの子ではありません。 – VGR