我试图通过xpath从以下请求中获取applicationId的值: -
<ApplicationStatusNotificationRequestMessage xmlns="http://schemas.co.za/application">
<b>http://localhost/test/sonoras</b>
<c>POST</c>
<Data><![CDATA[{"applicationId":"12345678","status":"ACTIVATED"}]]></Data>
</ApplicationStatusNotificationRequestMessage>
我正在使用的xpath表达式:
//app:ApplicationStatusNotificationRequestMessage/app:Data[@applicationId]/text()
不幸的是,XPath没有返回任何值。
答案 0 :(得分:2)
<d>
元素中的JSON内容只是一个text()
节点。 &#34; applicationId&#34;在您的JSON字符串中不会被评估为属性。使用CDATA这一事实无关紧要。
您的谓词正在尝试从text()
的{{1}}元素中选择app:Data
,但没有。{/ p>
使用contains()
函数限制@applicationId
text()
如果要获取applicationId值,则需要解析JSON字符串。有很多方法可以做到这一点。根据您使用的XPath版本,您将拥有更多/更少的选项。有关如何获取值的一些示例:
XPath 3.0 - 使用json-to-xml():
//app:ApplicationStatusNotificationRequestMessage/
app:Data[contains(., 'applicationId')]/text()
XPath 2.0 - 使用replace():
json-to-xml(//app:ApplicationStatusNotificationRequestMessage/
app:Data[contains(., 'applicationId')]/text())/*/*[@key='applicationId']/text()
XPath 1.0 - 使用substring-before()和substring-after():
replace(//app:ApplicationStatusNotificationRequestMessage/
app:Data[contains(., 'applicationId')]/text(), '.*applicationId.*?:.(\d+).,.*', '$1')
答案 1 :(得分:0)
如果您无法注册命名空间,可以使用:
"/*[name()='ApplicationStatusNotificationRequestMessage']/*[name()='Data']"