2016-10-18 5 views
0

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が考慮されていませんでした。

まだ分かりませんが、それは少なくとも機能します。

+1

記載してくださいあなたの質問の 'xml'の値。ここでは文字セットを使用する必要はありません。単に 'new InputSource(new StringReader(xml))'と書くことができます。 – VGR

+0

XMLを含むように私の質問を編集しました。私が新しい 'StringReader(xml)'を試してみると、XPathは空の文字列しか返さないことを示唆しています。 – MPhil123

+0

XPath式に 'Output/DataMatches'が含まれていますが、DataMatchesはOutputの子ではありません。 – VGR

答えて

0

パスが間違っているため、XPath式の結果は空です。ステップAuthPlusが省略されています。

このような問題を解決するには、分割統治アプローチを適用する必要があります。簡単なXPath式で試すことでAPIの呼び出しが正しいかどうかを確認し、XPathテストツール(oXygenなど)でXPathを試して確認できます。最も単純な可能性を最初に考えずに、エラーの原因についての結論に飛んできたようです。

(バック文字列に変換することができxmlが文字列であれば、あなたはにStringReaderを使用しなければならないだけではなく、そのバイトにXMLパーサを、それを変換し、と述べた。)

+0

こんにちは、助けてくれてありがとう - あなたが指摘した訂正(VGR私のオリジナルの質問のコメントで)残念ながら問題を解決していない - 私は今修正コードを表示するために私の元の質問を編集しました。 – MPhil123

関連する問題