/ / Wyodrębnij atrybut XML ignorując przestrzeń nazw [duplikat] - java, xml, xpath

Wyodrębnij atrybut XML ignorując przestrzeń nazw [duplicate] - java, xml, xpath

Muszę wyodrębnić attr wartość z takiego XML:

<FIXML xmlns="http://www.fixprotocol.org/FIXML-5-0-SP2">
<TAG attr="value">
...
</TAG>
</FIXML>

i spróbuj użyć takiego kodu Java

XPathExpression expression = XPathExpressionFactory.createXPathExpression("/FIXML/TAG/@attr");
XmlPayloadConverter converter = new DefaultXmlPayloadConverter();
Node node = converter.convertToNode(xmlStr);
Object result = expression.evaluateAsString(node);

Niestety result wartość jest tutaj zawsze pusta. Jeśli usunę attr przestrzeni nazw xmlns="http://www.fixprotocol.org/FIXML-5-0-SP2" kod działa zgodnie z oczekiwaniami (result ma value strunowy).

Jak zignorować przestrzeń nazw w moim przykładzie kodu Java?

AKTUALIZACJA: wygląda na to, że muszę użyć XPath local-name() działają w moim wyrażeniu, ale jak korzystać z niego praktycznie w moim przypadku?

ROZWIĄZANIE: w moim przypadku poprawnym wyrażeniem XPath jest "/*[local-name()="FIXML"]/*[local-name()="TAG"]/@attr"

Odpowiedzi:

0 dla odpowiedzi № 1

Coś podobnego zostało zamieszczone / odpowiedzi tutaj: Jak odzyskać przestrzenie nazw w plikach XML za pomocą Xpath

Alternatywą byłoby zapomniećpowiązanie z tym przedrostka przestrzeń nazw i po prostu uczyń swoją ścieżkę wolną od przestrzeni nazw. Możesz to zrobić przez za pomocą funkcji local-name (), ilekroć potrzebujesz odwołać się do element, którego przestrzeni nazw nie znasz. Na przykład:

//*[local-name() = "Element"]