Я попробовал ваш код с вашим xml, и он выводит весь текстовый контент для меня, очень странно. В любом случае, метод Node#getTextContext
возвращает текстовое содержимое текущего узла и его потомков.
Я предлагаю вам использовать node.getFirstChild().getNodeValue()
, который печатает текстовое содержимое для вашего узла, а не его потомков. Другим способом является перебор дочерних элементов узла Suburbs.
Вы также должны взглянуть здесь .
Это мой основной файл, который печатает один и тот же текст два раза, используя getFirstChild().getNodeValue()
и getChildNodes().item(i).getNodeValue()
:
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new File("dom.xml"));
NodeList nodeList = doc.getElementsByTagName("Suburb");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.hasChildNodes()) {
System.out.println("<tr><td>Suburb</td>" + "<td>"+node.getFirstChild().getNodeValue()+"</td></tr>");
NodeList textNodeList = node.getChildNodes();
StringBuilder textBuilder = new StringBuilder();
for (int j = 0; j < textNodeList.getLength(); j++) {
Node textNode = textNodeList.item(j);
if (textNode.getNodeType() == Node.TEXT_NODE) {
textBuilder.append(textNode.getNodeValue());
}
}
System.out.println("<tr><td>Suburb</td>" + "<td>" + textBuilder.toString() + "</td></tr>");
}
}
}
Это мой вывод с вашим xml:
<tr><td>Suburb</td><td>Bondi Junction</td></tr>
<tr><td>Suburb</td><td>Bondi Junction</td></tr>