Элемент Call-Name
находится в пространстве имен с URI, равным "http://www.mysite.com/interface/genericnamespace".. Поэтому вам необходимо либо
выбрать его по имени, используя это пространство имен, либо
для доступа к нему используется метод, независимый от пространства имен.
Тот факт, что элемент находится в другом пространстве имен, чем «корень» (элемент), не является прямымрелевантный.
Чтобы сделать # 1, вы должны объявить префикс для пространства имен в вашей среде выполнения XPath, например, в таблице стилей XSLT вы можете поместить xmnls:mysite="http://www.mysite.com/interface/genericnamespace"
. Затем вы должны выбрать элемент, используя этот префикс иимя элемента, например
/SomeMessage[1]/MessageDetails[1]/PAYLOAD[1]/mysite:Call-Name[1]/Body[1]/ActionToTake[1]/Fields[1]/InternalSystemId[1]
Конечно, вы можете использовать любой префикс, который вам нравится.
Для выполнения # 2 есть несколько опций. Если элемент Call-Name
не имеет родных элементов,или входит в стабильный порядок среди своих братьев и сестер, вы можете заменить *
на его имя. Таким образом, XPath выберет любой дочерний элемент PAYLOAD[1]
, независимо от его имени или пространства имен:
/SomeMessage[1]/MessageDetails[1]/PAYLOAD[1]/*[1]/...
Другой вариант, если вы смелы и доверяетеНе говоря о структуре вашего входного XML, используйте //
, чтобы пропустить этот элемент:
/SomeMessage[1]/MessageDetails[1]/PAYLOAD[1]//Body[1]/...
Если вам все еще нужно тестировать по имени, но не по пространству имен, вы можете использовать local-name() =
:
/SomeMessage[1]/MessageDetails[1]/PAYLOAD[1]/*[local-name()='Call-Name']/Body[1]/...