2011-07-30 33 views
5

tôi có thể phân tích cú pháp xml chỉ tốt với SAXParserFactory trong Java, nhưng trong một số tác phẩm, có thuộc tính một số phi thường hiện nay, như linear3D="0.5", vvPhân tích cú pháp XML với SAX trong java, phân biệt chữ hoa chữ thường.

Tôi muốn bằng cách nào đó làm cho

attributes.getValue(attr) 

trường hợp không nhạy cảm, để attributes.getValue("linear3d") trả về "0,5".

Một giải pháp là đọc tệp dưới dạng chuỗi trước, chuyển thành chữ thường và sau đó phân tích cú pháp, vì không có sự mơ hồ khi thực hiện việc này trong loại xml này. Tuy nhiên, điều này có thể được thực hiện đơn giản hơn, bằng cách thêm một số cờ vào nhà máy hoặc tương tự?

+0

Bạn chứ không phải nên thay đổi mô hình của bạn. XML phân biệt chữ hoa chữ thường. Đừng chống lại các công ước. –

+0

Vâng, không may, tôi đang cố gắng phân tích các tệp .flame, hầu như đáp ứng các tiêu chuẩn .xml. Tôi không có quyền kiểm soát cú pháp của nó, vì chúng được tạo bởi phần mềm của bên thứ 3. –

+0

Điều đó có nghĩa là gì? Bạn không có bất kỳ đảm bảo rằng nó sẽ luôn luôn linear3d hoặc linear3D? –

Trả lời

4

Thay vì chuyển đổi toàn bộ tệp sang trường hợp thấp hơn, cách tiếp cận sau sẽ tốt hơn. Điều này lặp đi lặp lại thông qua tất cả các thuộc tính của thẻ được chọn và comperes nó bỏ qua các trường hợp.

Bên implementaion của DefaultHandler viết phương pháp sau đây

private String getValueIgnoreCase(Attributes attributes, String qName){ 
    for(int i = 0; i < attributes.getLength(); i++){ 
     String qn = attributes.getQName(i); 
     if(qn.equalsIgnoreCase(qName)){ 
      return attributes.getValue(i); 
     } 
    } 
    return null; 
} 
Các vấn đề liên quan