2011-07-20 29 views
6

Tôi đang tạo một ứng dụng Android thực hiện phân tích cú pháp DOM trên một tệp xml. Tôi có một file xml đó trông như thế này:Tại sao có # nút văn bản trong tệp xml của tôi?

<?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> 

Nếu tôi chạy một phân tích cú pháp dom vào nó, như thế này:

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()); 
     } 
    } 
} 

in Ứng dụng của tôi ra sau

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

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

Câu hỏi của tôi là, trường #text nào và quan trọng hơn, làm cách nào để loại bỏ chúng?

Chỉnh sửa: Vì vậy, bây giờ tôi biết chúng là gì, tôi đã cố gắng bình thường hóa nó. Tôi đã cập nhật mã để phản ánh các thay đổi, nhưng kết quả tương tự.

Trả lời

5

Đó là khoảng trắng (dòng mới, không gian, tab) :)

+0

Tôi làm cách nào để kiểm tra? Tôi cho rằng tôi có thể làm một 'getNextSibling()' nhưng tôi có thể dựa vào đó luôn luôn là một '# text' là đứa con đầu tiên? – Otra

+0

Bạn không thể đếm trên #tiếp theo trước tiên, vì có thể có một số sau này. Bạn có ý nghĩa gì khi xóa? Nếu bạn đang thu thập tất cả các nút và xuất chúng ở đâu đó, chỉ cần kiểm tra mỗi nút khi bạn tạo chúng, xem loại của nó và nếu nó là #text VÀ nội dung là tất cả khoảng trắng, chỉ đơn giản là không xuất nó. –

+0

Tôi cho rằng việc xóa là một thuật ngữ xấu, tôi đang chạy bảo đảm rằng sẽ không có văn bản ở đó #text là. Nhưng bạn đã đưa ra chính xác những gì tôi đang tìm kiếm. Tôi có thể chạy một kiểm tra trên getNodeType(). Cảm ơn. – Otra

0

Làm điều này khi phân tích các tài liệu,

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

Điều này sẽ loại deflate file xml và loại bỏ tất cả trẻ em #text không mong muốn.

+0

Tôi đã thử nghiệm điều này, nó không hoạt động. Tôi vẫn thấy #text children. – Otra

1

Đây là những gì bạn nhận được:

1) Một danh sách nút với tất cả các nút này được đặt grand-cha mẹ

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

2) Tất cả các nút con của ông bà x

NodeList nodes = node.getChildNodes(); 

là các nút con của

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

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

3) Đứa trẻ y

nodes.item(y); 

Có thể có văn bản giữa và đây là #text bạn có, nếu bạn có:

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

Bạn sẽ nhận được:

yourTextHere1 parent1 yourTextHere2 parent2 yourTextHere3

Tôi hy vọng nó giúp bạn! Julien,

+0

Vì vậy, làm thế nào tôi có thể loại bỏ văn bản trẻ em hoặc thử nghiệm cho trẻ em văn bản? – Otra

+0

Document doc = builder.parse (đầu vào); doc.getDocumentElement(). Normalize(); Khi đồng nghiệp của tôi cho biết một tin nhắn từ tôi :) – jmartel

+0

Tôi đã thử rằng, không có xúc xắc ... – Otra

Các vấn đề liên quan