выпуск Java getTextContent () - PullRequest
       23

выпуск Java getTextContent ()

2 голосов
/ 03 апреля 2011

, когда я пытаюсь получить доступ к своим данным XML из метода doGet моего сервлета, он выводит значение только до пробелов, включая все значение.

XML-файл:

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

Затем я вызываю Пригород из сервлета Java в doGet:

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

и выводит только «Bondi» вместо «Bondi Junction»

Кто-нибудь знает почему?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2011

Я попробовал ваш код с вашим 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>
2 голосов
/ 03 апреля 2011

Попробуйте перебрать дочерние элементы suburb1 и значения сцепления всех содержащихся текстовых узлов. Метод getTextContent () очень проблематичен в большинстве реализаций DOM. Он редко делает то, что считают разработчики.

...