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 № 1Coś 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"]