2011-04-29 34 views
5

Tôi có một XML như sau:Làm thế nào để lấy một phần tử con trộn dưới dạng văn bản (JDOM)

<documentation> 
    This value must be <i>bigger</i> than the other. 
</documentation> 

Sử dụng JDOM, tôi có thể nhận được các cấu trúc văn bản sau đây:

Document d = new SAXBuilder().build(new StringReader(s)); 
System.out.printf("getText:   '%s'%n", d.getRootElement().getText()); 
System.out.printf("getTextNormalize: '%s'%n", d.getRootElement().getTextNormalize()); 
System.out.printf("getTextTrim:  '%s'%n", d.getRootElement().getTextTrim()); 
System.out.printf("getValue:   '%s'%n", d.getRootElement().getValue()); 

mà cung cấp cho cho tôi các kết quả đầu ra sau:

getText:   ' 
    This value must be than the other. 
' 
getTextNormalize: 'This value must be than the other.' 
getTextTrim:  'This value must be than the other.' 
getValue:   ' 
    This value must be bigger than the other. 
' 

Điều tôi thực sự muốn là lấy nội dung của phần tử dưới dạng chuỗi, cụ thể là, "This value must be <i>bigger</i> than the other.". getValue() đến gần nhưng xóa thẻ <i>. Tôi đoán tôi muốn một cái gì đó như innerHTML cho tài liệu XML ...

Tôi có nên chỉ sử dụng XMLOutputter trên nội dung không? Hoặc là có một lựa chọn tốt hơn?

+0

Bạn đã bao giờ tìm thấy câu trả lời hay cho câu hỏi này chưa? –

+1

Nhìn vào giải pháp của Prashant Bhate trên trang này, vì tôi nghĩ đó là câu trả lời bạn đang tìm kiếm: http://stackoverflow.com/questions/7910474/how-to-get-node-contents-from-jdom –

Trả lời

-1

Tôi muốn nói rằng bạn nên thay đổi tài liệu của bạn để

<documentation> 
    <![CDATA[This value must be <i>bigger</i> than the other.]]> 
</documentation> 

để tuân theo các đặc tả XML. Nếu không, <i> sẽ được coi là phần tử con của <documentation> và không phải là nội dung.

+0

Tôi đoán điều này thực sự có thể là cách nhanh nhất. Sẽ thử. Tuy nhiên, trên một mặt lưu ý rằng phần tử tài liệu đó là một 'xsd: documentation', nội dung của nó được khai báo là' bất kỳ', vì vậy ví dụ về mặt kỹ thuật là đúng ... –

+0

Một nút con ở giữa nội dung hỗn hợp KHÔNG ngụ ý rằng nút không thực sự là một nút. –

-1

Jericho HTML là lựa chọn tuyệt vời cho loại nhiệm vụ này. Bạn có thể thực hiện chính xác những gì bạn đang cố gắng thực hiện với một khối mã như thế này:

String snippet = new Source(html).getFirstElement().getContent().toString(); 

Thật tuyệt vời khi làm việc với HTML nói chung vì nó không cố ép nó thành XML ... đối phó với nó nhiều hơn nữa khoan dung.

+0

Đây là thú vị, tôi sẽ cho nó một shot đôi khi. Ngay bây giờ tôi muốn tránh thêm một sự phụ thuộc vào dự án ... –

+0

Ông có một tài liệu JDom, không phải HTML. XML! = HTML. –

+0

@ james.garriss Tất nhiên HTML và XML là khác nhau. Quan điểm của tôi là người ta có thể sử dụng Jericho để đơn giản hóa một nhiệm vụ có thể gây khó chịu để đối phó thông qua các API XML cồng kềnh. – stevevls

0

Trong JDOM giả:

for Object o in d.getRootElement().getContents() 
    if o instanceOf Element 
     print <o.getName>o.getText</o.getName> 
    else // it's a text 
     print o.getText() 

Tuy nhiên, như Prashant Bhate wrote: content.getText() cho văn bản ngay lập tức mà chỉ là tốt hữu ích với các yếu tố lá với nội dung văn bản.

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