xpath无法使用CDATA解析SOAP响应

时间:2015-01-07 10:22:19

标签: xml soap xpath

我有这种格式的SOAP响应:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:GetCampResponse xmlns:ns2="http://ws.ooredoo.com/">
         <return><![CDATA[<GetSomething>
<NOMBRE_P>3</NOMBRE_P>
<CATEGORY>HV</CATEGORY>
<P_E>
    <Sequence>1</Sequence>
    <P_ID>101</P_ID>
    <DESCRIPTION>some description</DESCRIPTION>
    <DATE_DEB>07/01/2015</DATE_DEB>
    <DATE_FIN>31/03/2015</DATE_FIN>
</P_E>
</GetSomething>]]></return>
      </ns2:GetCampResponse>
   </S:Body>
</S:Envelope>

我正尝试使用以下失败的命令从CDATA标记中提取信息:

/S:Envelope/S:Body/*/return/<![CDATA[<GetCampaignforMSISDN>/NOMBRE_PROMO

/S:Envelope/S:Body/*/return/*/NOMBRE_PROMO

所以我想知道,在xpath中是否支持从CDATA中提取信息。如果有,怎么样?

2 个答案:

答案 0 :(得分:2)

尝试这样做:

//return/text()

检查what xpath to select CDATA content when some childs exist

在shell中使用saxon-lint进行演示:

$ saxon-lint '//return/text()' /tmp/l.xml
<GetSomething>
<NOMBRE_P>3</NOMBRE_P>
<CATEGORY>HV</CATEGORY>
<P_E>
    <Sequence>1</Sequence>
    <P_ID>101</P_ID>
    <DESCRIPTION>some description</DESCRIPTION>
    <DATE_DEB>07/01/2015</DATE_DEB>
    <DATE_FIN>31/03/2015</DATE_FIN>
</P_E>
</GetSomething>

然后:

$ saxon-lint '//return/text()' /tmp/l.xml > /tmp/ll.xml

然后:

$ cat /tmp/ll.xml
<GetSomething>
<NOMBRE_P>3</NOMBRE_P>
<CATEGORY>HV</CATEGORY>
<P_E>
    <Sequence>1</Sequence>
    <P_ID>101</P_ID>
    <DESCRIPTION>some description</DESCRIPTION>
    <DATE_DEB>07/01/2015</DATE_DEB>
    <DATE_FIN>31/03/2015</DATE_FIN>
</P_E>
</GetSomething>

最后:

$ saxon-lint --xpath '//NOMBRE_P/text()' /tmp/ll.xml
3

答案 1 :(得分:1)

这就是CDATA的意思。这意味着“这里的东西可能看起来像XML但不会被误导,我希望它被视为没有标记的字符数据”。这是对XML和XPath工具的指令,不要用bargepole触摸它。这是CDATA的唯一目的。如果您希望将内容视为XML并且可以访问XPath表达式,则不要将其放在CDATA中。