En Java, lorsque j'essaie de créer un nouveau InputSource
et de lui attribuer un ByteArrayInputStream
, il ne crée pas de jeu CharacterStream ni d'encodage.Java new InputSource ne générant pas de flux de caractères
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);
}
que je fais ce qui précède, où xml
est un XML valide stocké sous forme de chaîne. Le XML lui-même est comme ci-dessous.
<?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>
Le résultat est que result
est une chaîne vide et donc noAgePir
n'est pas réglé.
Merci à l'avance pour toute aide.
Fixé.
Merci pour toute l'aide - le problème principal était avec le XPath que j'utilisais. Pour une raison quelconque, le fichier XML ne considérait pas Output
comme une balise valide - seulement lorsque je l'ai fait /OutputRoot/child::node()[2]/AuthPlus/DataMatches/NoAgePri
a-t-il fonctionné.
Je ne sais toujours pas pourquoi mais cela fonctionne au moins.
S'il vous plaît inclure la valeur de 'xml' dans votre question. Notez que vous n'avez pas besoin d'utiliser un jeu de caractères ici; vous pouvez simplement écrire 'new InputSource (new StringReader (xml))'. – VGR
Édité ma question pour inclure le XML. Quand j'essaie de nouveau 'StringReader (xml)' comme vous le suggérez, le XPath ne renvoie que des chaînes vides. – MPhil123
Votre expression XPath contient 'Output/DataMatches' mais DataMatches n'est pas un enfant de Output. – VGR