2017-02-13 15 views
0

Я пытаюсь получить тег Decision внутри ответа PDP с Xpath3 на Anypoint mule.Как получить теги внутри CDATA с Xpath3 в Anypoint Mule?

Это реакция PDP:

<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. Это то, что я пытаюсь сделать:

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

Заранее спасибо!

Хуан Андрес

+0

Внутри CDATA нет меток. Это то, что означает CDATA: «вещи здесь могут быть похожими на теги, но они не являются: их следует рассматривать как символьные данные». Если CDATA используется неправильно, как здесь, вам нужно будет извлечь содержимое CDATA в виде текста и отправить его в XML-парсер. –

ответ

0

Вы можете использовать регулярное выражение для удаления CDATA с вашего XPATH3 следующим образом: -

<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 вам нужно выполнить еще одно извлечение XPATH3, чтобы получить требуемое значение из xml