2016-10-18 15 views
0

Java에서 새로운 InputSource을 만들고이를 ByteArrayInputStream으로 가져 오면 CharacterStream을 만들지 않으며 인코딩 세트도 생성하지 않습니다. xml이 문자열로 저장 유효한 XML이다 내가 위를하고있어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 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'의 가치. 여기서 charset을 사용할 필요는 없다. 당신은 간단하게'new InputSource (new StringReader (xml))'를 쓸 수있다. – VGR

+0

XML을 포함하도록 내 질문을 편집했습니다. XPath가 여전히 빈 문자열 만 반환한다고 제안하는 것처럼 새로운'StringReader (xml)'을 시도해보십시오. – MPhil123

+0

XPath 표현식에 'Output/DataMatches'가 포함되어 있지만 DataMatches가 Output의 하위가 아닙니다. – VGR

답변

0

경로가 잘못되어 XPath 식 결과가 비어 있습니다. AuthPlus 단계를 생략했습니다.

이와 같은 문제를 해결하려면 분할 및 정복 방식을 적용해야합니다. 간단한 XPath 표현식으로 API 호출을 시도하여 API 호출이 올바른지 확인할 수 있으며 XPath 테스트 도구 (예 : oXygen)에서 XPath가 올바른지 확인할 수 있습니다. 가장 단순한 가능성을 우선 고려하지 않고 오류의 원인에 대한 결론에 도달 한 것처럼 보입니다.

(그리고 xml이 문자열 일 경우에 XML 파서는 문자열로 다시 변환 할 수 있습니다 만, 그래서 당신은 StringReader를를 사용하는 대신 바이트로 변환해야한다,라고하는 데.)

+0

안녕하세요, 도움 주셔서 감사합니다 - 당신이 지적한 수정 (또한 VGR 제안했다 불행히도 문제를 해결하지 못하는 내 원래 질문에 대한 의견에) - 수정 된 코드를 표시하기 위해 원래 질문을 편집했습니다. – MPhil123