2013-08-30 1 views
1

У меня есть XML в этом примере формат:XPath Error - по умолчанию (без префикса) 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 Messaging Broker Extender, который, похоже, не хочет играть :( – RedEyedMonster

ответ

1

Вы пытались получить узел, используя выражение, чтобы получить данные EventType, например [//*local-name()='EventType'], или вы даже можете попробовать что-то вроде [/*localname()='ExternalPath'/*local-name()='EventType'] не использовать и.

Смежные вопросы