2013-08-30 59 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']之類的不使用和。

相關問題