Мне нужно получить данные из XML, и я использую XPath, довольно новый для него, хотя мне это нравится.
Я извлекаю некоторые узлы на основе их атрибутов, например:
/cesAlign/linkGrp[@targType='s']
Теперь я хотел бы получить значение другого атрибута в узле:
/cesAlign/linkGrp[@targType='s']/@fromDoc
Однако, это возвращает только первый удар.Я хотел бы вернуть атрибут всех узлов, содержащих targType ='s'
Я думал о циклическом просмотре списка узлов и последующем чтении атрибута ... что-то вроде этого:
expr = xpath.compile("/cesAlign/linkGrp[@targType='s']/@fromDoc");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
int i = 0;
for (i = 0; i < nl.getLength(); i++) {
expr = xpath.compile("/@fromDoc");
System.out.println((String) expr.evaluate(nl, XPathConstants.STRING));
}
Но я не уверен, есть ли лучший и более элегантный способ сделать это.
Вот пример XML:
<cesAlign version="1.0">
<linkGrp targType="s" toDoc="mt/C2004310.01029701.xml.gz" fromDoc="en/C2004310.01029701.xml.gz">
<linkGrp targType="s" toDoc="mt/C2004310.01029702.xml.gz" fromDoc="en/C2004310.01029702.xml.gz">
</cesAlign>
Спасибо!