Почему в моем XML-файле есть узлы #text? - PullRequest
7 голосов
/ 20 июля 2011

Я делаю приложение для Android, которое выполняет анализ DOM для файла XML.У меня есть XML-файл, который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<family>
    <grandparent>
        <parent1>
            <child1>Foo</child1>
            <child2>Bar</child2>
        </parent1>
        <parent2>
            <child1>Raz</child1>
            <child2>Mataz</child2>
        </parent2>
    </grandparent>  
</family>

Если я запускаю на нем анализатор DOM, например:

try {
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

    Document doc = builder.parse(input);
    doc.getDocumentElement().normalize();   //added in since the edit
    NodeList nodd = doc.getElementsByTagName("grandparent");
    for (int x = 0; x < nodd.getLength(); x++){
        Node node = nodd.item(x);
        NodeList nodes = node.getChildNodes();
        for(int y = 0; y < nodes.getLength(); y++){
            Node n = nodes.item(y);
            System.out.println(n.getNodeName());
        }
    }
}

Мое приложение выводит следующее

07-20 18: 24: 28,395: INFO / System.out (491): # текст

07-20 18: 24: 28,395: INFO / System.out (491): parent1

07-20 18: 24: 28,395: INFO / System.out (491): #text

07-20 18: 24: 28,395: INFO / System.out (491):parent2

07-20 18: 24: 28.395: INFO / System.out (491): # text

Мой вопрос: что это за поля #text и, что более важно,как мне от них избавиться?

Редактировать: Так что теперь, когда я знаю, что они есть, я попытался нормализовать это.Я обновил код, чтобы отразить изменения, но результат тот же.

Ответы [ 3 ]

5 голосов
/ 20 июля 2011

Это пробел (переводы строки, пробелы, табуляции):)

1 голос
/ 20 июля 2011

Вот что вы получите:

1) Список узлов со всеми узлами, являющимися прародителями

NodeList nodd = doc.getElementsByTagName("grandparent");

2) Все дочерние узлы прародителя x

NodeList nodes = node.getChildNodes();

, которые являются подузлами

< grandparent >
    < parent1 >
       ...
    < /parent1 >

    < parent2 >
       ...
    < /parent2 >
< /grandparent >

3) Дочерний y

nodes.item(y);

Между ними может быть текст, и это # ​​текст, который у вас есть, если бы у вас было:

< grandparent >
    yourTextHere1
    < parent1 >
       ...
    < /parent1 >
    yourTextHere2
    < parent2 >
       ...
    < /parent2 >
    yourTextHere3
< /grandparent >

Вы бы получили:

yourTextHere1 parent1 yourTextHere2 parent2 yourTextHere3

Надеюсь, это помогло вам!Жюльен,

0 голосов
/ 20 июля 2011

Сделайте это при разборе документа,

Document doc = builder.parse(input); 
doc.getDocumentElement().normalize();

Это приведет к дефлятированию xml-файла и удалению всех нежелательных #text потомков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...