Давайте возьмем простой XML-документ:
<x>
<e>
<e>
<e>Whatever 1</e>
</e>
</e>
<e>
<e>
<e>Whatever 2</e>
</e>
</e>
<e>
<e>
<e>Whatever 3</e>
</e>
</e>
</x>
Используя стандартный org.w3c.dom, я могу получить узлы в X, выполнив ..
NodeList fullnodelist = doc.getElementsByTagName("x");
Но если я хочу вернуть следующий набор "е", я пытаюсь использовать что-то вроде ..
Element element = (Element) fullnodelist.item(0);
NodeList nodes = pelement.getElementsByTagName("e");
Ожидается, что он возвратит «3» узла (потому что есть 3 набора «e»), но вместо этого он возвращает «9» - потому что он получает все записи с «e» одновременно.
Это было бы хорошо в приведенном выше случае, потому что я, вероятно, мог бы пройтись по нему и найти то, что я ищу. У меня проблема в том, что, когда файл XML выглядит следующим образом:
<x>
<e>
<pattern>whatever</pattern>
<blanks>
<e>Something Else</e>
</blanks>
</e>
<e>
<pattern>whatever</pattern>
<blanks>
<e>Something Else</e>
</blanks>
</e>
</x>
Когда я запрашиваю значение "e", он возвращает 4 вместо (что я ожидаю) 2.
Я просто не понимаю, как работает анализ DOM? Обычно в прошлом я использовал свои собственные XML-документы, поэтому я никогда не назвал бы такие элементы, как это, но, к сожалению, это не мой XML-файл, и у меня нет выбора для такой работы.
То, что я думал, я бы сделал, это написать цикл, который "сверлит" узлы, чтобы я мог сгруппировать каждый узел вместе ...
public static NodeList getNodeList(Element pelement, String find)
{
String[] nodesfind = Utilities.Split(find, "/");
NodeList nodeList = null;
for (int i = 0 ; i <= nodesfind.length - 1; i++ )
{
nodeList = pelement.getElementsByTagName( nodesfind[i] );
pelement = (Element)nodeList.item(i);
}
// value of the nod we are looking for
return nodeList;
}
.. Так что если вы передадите "s / e" в функцию, она вернет 2 искомых узла (или элементы, может быть, я использую неверную терминологию?). вместо этого он возвращает все узлы "e" в этом узле.
Я использую J2SE для этого, поэтому варианты довольно ограничены. Я не могу использовать сторонние парсеры XML.
В любом случае, если кто-то еще со мной и у него есть предложение, это будет оценено.