2015-06-09 15 views
7

Tôi có một tập tin XML rằng khoảng trông như thế này:tập tin XML với ä

<customer> 
    <name>M&uuml;ller</name> 
</customer> 

tôi phân tích các tập tin sử dụng đoạn mã sau:

File xmlFile = new File("file.xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(xmlFile) 

Và nhận được lỗi mà đơn vị &uuml; được tham chiếu nhưng không được khai báo. Những gì tôi muốn là mục nhập đang được đọc nhưng không được phân tích cú pháp theo bất kỳ cách nào, tôi muốn nhận được giá trị như được viết trong tệp.

Tôi làm như thế nào?

+0

Tôi gặp vấn đề tương tự trong một vài tuần. Nhưng tôi không tìm thấy một giải pháp tốt. Tôi đã sử dụng phép chuyển đổi xslt để chuyển đổi thực thể html thành thực thể xml và sau đó phân tích cú pháp tệp đã sửa đổi. – Jens

+0

XML có tham chiếu đến một DTD xác định thực thể đó hay bản thân XML có lỗi không? –

+4

Lý do tại sao bạn gặp phải lỗi là vì 'ü 'không phải là tham chiếu thực thể XML tiêu chuẩn. Trong XML, chỉ có [năm tham chiếu thực thể chuẩn] (http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML): '&', '"', ''', '<', '& gt'. Những thứ như 'ü 'là các tham chiếu thực thể HTML, nhưng chúng không được định nghĩa trong XML. – Jesper

Trả lời

4

tôi đã cố gắng thiết lập:

dbFactory.setExpandEntityReferences(false); 

nhưng điều này không hoạt động.

Nếu bạn không thể sửa đổi nội dung xml của bạn (sử dụng UTF-8 xml có thể chứa u âm sắc), bạn có thể để thêm một DTD:

<!DOCTYPE definition [ 
<!ENTITY uuml "&#xfc;"> 
]> 

Nếu bạn không thể sửa đổi xml của bạn tệp, tải nội dung xml và thêm vào DTD:

String dtd = "<!DOCTYPE definition [\n<!ENTITY uuml '&#xfc;'>\n]>\n", 
      contents = <load xmlFile>; 
Reader reader = new StringReader(dtd + contents); 
InputSource src = new InputSource(reader); 
Document doc = dBuilder.parse(src); 
Các vấn đề liên quan