这是XML文档。
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mtc="OTC_Matching_11-0" xmlns:rm="OTC_RM_11-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="OTC_RM_11-0 /xmls/OTC/OTC_RM_11-0.xsd OTC_Matching_11-0 /xmls/OTC/OTC_Matching_11-0.xsd http://schemas.xmlsoap.org/soap/envelope/ /xmls/OTC/soap-envelope.xsd ">
<env:Header>
<OTC_RM xmlns="OTC_RM_11-0">
<Manifest>
<TradeMsg>
<Activity>New</Activity>
<Status>Submit</Status>
</TradeMsg>
</Manifest>
</OTC_RM>
</env:Header>
</env:Envelope>
活动的xpath不应该是:
/env:Envelope/env:Header/rm:OTC_RM/rm:Manifest/rm:TradeMsg/rm:Activity
我不行。我试了here
问题是什么?
答案 0 :(得分:2)
您可以选择local-name()
函数来解决默认命名空间。试试这个:
/env:Envelope/env:Header/*[local-name()='OTC_RM']/*[local-name()='Manifest']/*[local-name()='TradeMsg']/*[local-name()='Activity']
答案 1 :(得分:1)
当然,由于命名空间在OTC_RM默认,它无法工作。
因此,您必须声明此命名空间及其前缀(例如xmlns:rm="OTC_RM_11-0"
)OTC_RM及其子级。并且您将能够从以下xpath访问Activity
元素:
/env:Envelope/env:Header/rm:OTC_RM/rm:Manifest/rm:TradeMsg/rm:Activity
修改强> XML应更新,以便在您正在使用的网站上工作,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mtc="OTC_Matching_11-0" xmlns:rm="OTC_RM_11-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="OTC_RM_11-0 /xmls/OTC/OTC_RM_11-0.xsd OTC_Matching_11-0 /xmls/OTC/OTC_Matching_11-0.xsd http://schemas.xmlsoap.org/soap/envelope/ /xmls/OTC/soap-envelope.xsd ">
<env:Header>
<rm:OTC_RM>
<rm:Manifest>
<rm:TradeMsg>
<rm:Activity>New</rm:Activity>
<rm:Status>Submit</rm:Status>
</rm:TradeMsg>
</rm:Manifest>
</rm:OTC_RM>
</env:Header>
</env:Envelope>