我有这种格式的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中提取信息。如果有,怎么样?
答案 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中。