Я пытаюсь определить правильное выражение XPath, чтобы вернуть значение атрибута xsi:type
в элементе Body
. Я пробовал то, что кажется всем без везения. Основываясь на том, что я читал, это кажется близким, но, очевидно, это не правильно. Любое быстрое руководство, чтобы я мог наконец отдохнуть?Получить значение xsi: type with xpath
//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 выглядит хорошо для меня. Вы используете этот XPath в XQUERY, XSLT или что-то еще? Наиболее вероятной причиной проблемы здесь является путаница, вызванная префиксами пространства имен. Один из способов устранить пространства имен в качестве источника путаницы - это переписать xpath как это: // * [local-name() eq 'Body']/@ * [local-name() eq 'type'] –
Мюррей прав , поскольку в XPath обычно существуют два способа работы с пространствами имен: во-первых: использование функций 'local-name()' и 'namespace-uri()' XPath, во-вторых: использование правильных механизмов механизма XPath - например для стандартного JAXP вы должны использовать правильно сконфигурированное пространство имен, которое отображает префиксы в пространства имен. –