2017-02-13 7 views
0

Anypoint 노새에서 Xpath3을 사용하여 PDP 응답 내에 Decision 태그를 가져 오려고합니다.Anypoint Mule에서 Xpath3을 사용하여 CDATA 내부에서 태그를 얻는 방법은 무엇입니까?

<ns:getDecisionResponse xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://org.apache.axis2/xsd"> 
    <ns:return><![CDATA[<Response xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17"><Result><Decision>Indeterminate</Decision><Status><StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:syntax-error"/><StatusMessage>Invalid request : DOM of request element can not be created from String</StatusMessage></Status></Result></Response>]]></ns:return> 
</ns:getDecisionResponse> 

문제는 내가 CDATA의 내부에 태그를 액세스 할 수 있다는 것입니다 :

는 PDP의 반응이다. 이것은 내가하려고했던 것입니다 : 사전에

#[xpath3('/ns:getDecisionResponse/ns:return/(the problem is here...)',payload, 'STRING')] 

감사합니다!

후안 안드레스

+0

CDATA 내에 태그가 없습니다. 이것이 CDATA가 의미하는 것입니다 : "여기에있는 것들은 태그처럼 보일지도 모르지만 그렇지 않습니다. 문자 데이터로 취급되어야합니다." 여기 에서처럼 CDATA가 잘못 사용 된 경우 텍스트로 CDATA의 내용을 추출하여 XML 파서에 제출해야합니다. –

답변

0

당신은 다음과 같이 XPATH3에서 CDATA를 제거하는 정규식 표현을 사용할 수 있습니다 : -

<logger message="#[xpath3('/*:getDecisionResponse/*:return',payload, 'STRING').replaceAll(&quot;[^\\u0009\\u000A\\u000D\\u0020-\\uD7FF\\uE000-\\uFFFD\\x{10000}-\\x{10FFFF}]&quot;, &quot;&quot;)]" level="INFO" doc:name="Logger"/> 

참조 : - 이제 http://www.rgagnon.com/javadetails/java-sanitize-xml-string.html
을 당신이 당신의 에서 여기에 XML을 일단 CDATA xml에서 필요한 값을 얻기 위해 다른 XPATH3 추출을 수행해야합니다.