【发布时间】:2012-02-07 09:08:30
【问题描述】:
我正在尝试确定正确的 XPath 表达式以返回 Body 元素上的 xsi:type 属性的值。我已经尝试过似乎没有运气的一切。根据我读到的内容,这似乎很接近,但显然不正确。有什么快速指导可以让我最终休息一下吗?
//v20:Body/@xsi:type
我希望它返回v20:SmsMessageV1RequestBody
<v20:MessageV1Request>
<v20:Header>
<v20:Source>
<v20:Name>SOURCE_APP</v20:Name>
<v20:ReferenceId>1326236916621</v20:ReferenceId>
<v20:Principal>2001</v20:Principal>
</v20:Source>
</v20:Header>
<v20:Body xsi:type="v20:SmsMessageV1RequestBody">
<v20:ToAddress>5555551212</v20:ToAddress>
<v20:FromAddress>11111</v20:FromAddress>
<v20:Message>TEST</v20:Message>
</v20:Body>
</v20:MessageV1Request>
【问题讨论】:
-
Xpath 表达式对我来说看起来不错。您是在 XQUERY、XSLT 还是其他东西中使用这个 XPath?这里问题的最可能原因是命名空间前缀引起的混乱。消除命名空间造成混淆的一种方法是将 xpath 重写为: //*[local-name() eq 'Body']/@*[local-name() eq 'type']
-
Murray 是对的,因为在 XPath 中处理命名空间通常有两种方法 - 第一种:使用
local-name()和namespace-uri()XPath 函数,第二种:使用 XPath 引擎的适当机制 - 例如对于标准 JAXP,您必须使用正确配置的 NamespaceContext,它将前缀映射到命名空间。
标签: xml xpath xsd spring-integration eai