2

当我试图从doGet我的 servlet 方法访问我的 xml 数据时,它只输出到空格的值,包括整个值。

XML 文件:

<RealEstate>
    <Property>
            <Type>Apartment</Type>
            <Bedrooms>2</Bedrooms>
            <Bathrooms>2</Bathrooms>
            <Suburb>Bondi Junction</Suburb>
            <Rent>1000</Rent>
    </Property>
</RealEstate>

然后我从 Java Servlet 中调用 Suburb doGet

Node suburb1 = doc.getElementsByTagName("Suburb").item(i);
out.println("<tr><td>Suburb</td>" + "<td>"+suburb1.getTextContent()+"</td></tr>");

它只输出“Bondi”而不是“Bondi Junction”

有人知道为什么吗?

4

2 回答 2

4

我用你的 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>
于 2011-04-03T10:05:44.417 回答
2

尝试迭代郊区 1 的孩子和所有包含的文本节点的连接值。getTextContent() 方法在大多数 DOM 实现中都存在很大问题。它很少做开发人员认为它应该做的事情。

于 2011-04-03T02:54:57.153 回答