Конвертировать #text из getNodeName в строку - PullRequest
2 голосов
/ 28 августа 2011

Я анализирую XML-файл следующим образом:

<ROW>
<INDUSTRY_ID>1</INDUSTRY_ID>
<ID>314</ID>
</ROW>

Вот мой код:

NodeList titleList = list.getElementsByTagName("ROW");
Log.w("nodeName is ",titleList.item(0).getChildNodes().item(1).getFirstChild().getNodeName());
Log.w("nodeValue is ",titleList.item(0).getChildNodes().item(1).getFirstChild().getNodeName());

Я могу успешно получить содержимое тега и тега, а именно, я получил«1» и «314» соответственно;Тем не менее, я получил #text от getNodeName ().Я также попытался:

titleList.item(0).getChildNodes().item(1).getFirstChild().getNodeName().toString()

Но я все еще получал #text.У меня вопрос, как я могу получить "INDUSTRY_ID" и "ID" вместо этого?

1 Ответ

2 голосов
/ 28 августа 2011

Вы перешли вниз к текстовому узлу. Текстовые узлы технически не имеют имен, только (текстовые) значения. Вы хотите это:

NodeList titleList = list.getElementsByTagName("ROW");
Log.w("nodeName is ",titleList.item(0).getChildNodes().item(1).getNodeName());
Log.w("nodeValue is ",titleList.item(0).getChildNodes().item(3).getNodeName());

Однако это очень ненадежный способ доступа к узлам и значениям элементов, поскольку он зависит от форматирования пробелов. Используйте Xpath для получения списка необходимых элементов и доступа к их соответствующим именам и значениям

XPath xp = XPathFactory.newInstance();
NodeList elements = (NodeList) xp.evaluate(doc, "//ROW/*", XPathConstants.NODESET); 
for(int i=0; i < elements.getLength(); ++i) {
    String name = elements.itemt(i).getNodeName();
    String value = elements.itemt(i).getTextContent();
} 
...