2013-08-30 76 views
1

我在这个例子格式的XML:XPath的错误 - 默认(无前缀)命名空间URI XPath查询始终是“”

<ExternalEvent xmlns="http://www.redeyedmonster.co.uk/Integration/ESB"> 
    <EventType>Create</EventType> 
    <Message>SomeMessage</Message> 
    <ServiceRequestId>75a144b8-5a11-e311-bd23-0050569f00cc</ServiceRequestId> 
    <SourceSystem>MySource</SourceSystem> 
</ExternalEvent> 

,我坚持了下来。

我想评估EventType节点的值。我曾尝试:

/ExternalEvent/EventType 

/*[local-name() = 'ExternalPath' and *[local-name() = 'EventType']] 

/*[local-name()='ExternalEvent' and namespace-uri()='http://www.redeyedmonster.co.uk/Integration/ESB']/*[local-name()='EventType' and namespace-uri()='http://www.redeyedmonster.co.uk/Integration/ESB'] 

以及许多其他变化。然而,在XPath Tester我总是得到同样的错误是:

默认(无前缀)命名空间URI XPath查询始终是“”,它不能被重新定义为“http://www.redeyedmonster.co.uk/Integration/ESB”。

如果删除了命名空间的短语(的xmlns =“http://www.redeyedmonster.co.uk/Integration/ESB”)从XML那么我能够评估事件的值类型没有问题,但不幸的是,我被这种格式的XML卡住了,它不能改变我的解决方案。

有没有办法解决这个问题?我相信这可能是我在ESB解决方案中遇到的路由问题的根本原因。

+0

最后一个选项应该可以正常工作,但处理XPath中的命名空间的常用方法是将URI绑定到前缀,然后在表达式中使用该前缀(例如'/ esb:ExternalEvent/esb:EventType')。具体如何声明前缀绑定在不同XPath引擎之间有所不同 - 您使用什么工具或库来执行这些XPath表达式? –

+0

该错误消息似乎是您正在使用的测试程序的限制,而不是您尝试测试的表达式的问题。 –

+0

我实际上试图解决这个BizTalk ESB消息传播代理扩展器,看起来不想玩:( – RedEyedMonster

回答

1

您是否试图通过使用表达式直接获取EventType数据,如[//*local-name()='EventType']或者您甚至可以尝试类似[/*localname()='ExternalPath'/*local-name()='EventType']之类的不使用和。

相关问题