Разбор xml в java - getTextContent() и getNodeValue() возвращают только \n, \t, и whitespace

У меня небольшие проблемы с разбором некоторых XML в java. Мой XML файл читается корректно и я могу получить большую часть информации из файла без каких-либо проблем (т.е. StreamType узел, показанный в xml фрагменте), используя функцию узлов getTextContent().

Но когда я пытаюсь работать с дочерними элементами узла, обе функции getNodeValue() и getTextContent() возвращают это случайное значение: "\n \t\t".

СвойствоNodeList кажется правильно заполненным (содержит все 18 элементов свойства).

Вот отрывок из моего кода:

Document document;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(appXML);

...

String typeName = document.getElementsByTagName("StreamType").item(0).getTextContent();

...

String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
int nodelistlength = propertyNodes.getLength();
for (int i = 0; i < nodelistlength; i++) {
    Node currentNode = propertyNodes.item(i);
    Node nameNode = currentNode.getFirstChild();
    Node valueNode = currentNode.getLastChild();

    String name = nameNode.getNodeValue();
    String value = valueNode.getNodeValue();

    if (nameNode.getTextContent().equalsIgnoreCase("maxConnections"))
        limit = valueNode.getTextContent();
}

А вот несколько отрывков из XML, который я пытаюсь разобрать:

<Root>
 <Application> 
  <Streams>
   <StreamType>live</StreamType>
   ...
  </Streams>

  ...

  <Properties> 

   ...

   <Property>
    <Name>maxConnections</Name> 
    <Value>1000</Value> 
   </Property> 

   ...

  </Properties>
 </Application>
</Root>

Есть идеи, что я здесь делаю неправильно? Большое спасибо!

EDIT: Теперь работает, благодаря учебнику, размещенному @home. Вот как я исправил код:

1) Модифицировал блок кода, начиная с "String limit" и заканчивая скобкой конца цикла for:

String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
for (int i = 0; i < propertyNodes.getLength(); i++) {
    Node currentNode = propertyNodes.item(i);

    if (currentNode.getNodeType() != Node.ELEMENT_NODE)
        continue;

    Element currentElement = (Element)currentNode;

    if (getTagValue("Name",currentElement).equalsIgnoreCase("maxConnections"))
        limit = getTagValue("Value",currentElement);
}

2) Добавил эту удобную функцию из учебника:

private static String getTagValue(String sTag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
    Node nValue = (Node) nlList.item(0);
    return nValue.getNodeValue();
}

Теперь она безупречно извлекает пары имя/значение дочернего элемента "Properties". Большое спасибо!

11
задан Katherine Williams 12 September 2011 в 20:29
поделиться