Tôi tự hỏi liệu có một hàm trong Ruby như is_xml?(string)
để xác định xem chuỗi đã định dạng XML hay không.Kiểm tra xem chuỗi có được định dạng XML
Trả lời
Nokogiri của parse
sử dụng một thử nghiệm regex đơn giản tìm kiếm <html>
trong một nỗ lực để xác định xem dữ liệu được phân tích cú pháp là HTML hay XML:
string =~ /^s*<[^Hh>]*html/ # Probably html
Something tương tự, tìm kiếm các khai báo XML sẽ là một điểm khởi đầu:
string = '<?xml version="1.0"?><foo><bar></bar></foo>'
string.strip[/\A<\?xml/]
=> "<?xml"
Nếu điều đó trả về bất kỳ điều gì khác ngoài nil
thì chuỗi chứa khai báo XML. Điều quan trọng là phải kiểm tra điều này vì một chuỗi rỗng sẽ đánh lừa các bước tiếp theo.
Nokogiri::XML('').errors.empty?
=> true
Nokogiri cũng có phương pháp errors
, mà sẽ trả về một mảng các lỗi sau khi cố gắng phân tích một tài liệu bị thay đổi. Thử nghiệm cho mọi kích thước sẽ giúp:
Nokogiri::XML('<foo>').errors
=> [#<Nokogiri::XML::SyntaxError: Premature end of data in tag foo line 1>]
Nokogiri::XML('<foo>').errors.empty?
=> false
Nokogiri::XML(string).errors.empty?
=> true
sẽ đúng nếu tài liệu có giá trị về mặt cú pháp.
tôi chỉ thử nghiệm Nokogiri để xem nếu nó có thể biết sự khác biệt giữa một chuỗi thường xuyên vs đúng XML:
[2] (pry) main: 0> doc = Nokogiri::XML('foo').errors
[
[0] #<Nokogiri::XML::SyntaxError: Start tag expected, '<' not found>
]
Vì vậy, bạn lặp qua tập tin của bạn và có thể sắp xếp chúng thành XML và phi -xml dễ dàng:
require 'nokogiri'
[
'',
'foo',
'<xml></xml>'
].group_by{ |s| (s.strip > '') && Nokogiri::XML(s).errors.empty? }
=> {false=>["", "foo"], true=>["<xml></xml>"]}
Gán kết quả của group_by
cho một biến, và bạn sẽ có một hash bạn có thể kiểm tra các phi XML (false
) hoặc XML (true
).
Tuyệt vời! Các chi tiết thực sự hữu ích. – mCY
Tôi đã thêm một chút mã bạn có thể thấy hữu ích. –
Không có chức năng như vậy trong lớp String Ruby hoặc mở rộng chuỗi tích cực hỗ trợ, nhưng bạn có thể sử dụng Nokogiri để detect errors in XML:
begin
bad_doc = Nokogiri::XML(badly_formed) { |config| config.strict }
rescue Nokogiri::XML::SyntaxError => e
puts "caught exception: #{e}"
end
Điều này không cho chúng ta biết nhiều: 'Nokogiri :: XML ('') {| config | config.strict} => #
@theTinMan đúng, liên kết có một ví dụ về việc sử dụng .errors là tốt. 'đặt bad_doc.errors' – nurettin
Cảm ơn câu trả lời của bạn. Bây giờ tôi biết phải làm gì ~ – mCY
- 1. Kiểm tra xem tệp từ xa có phải là XML được định dạng tốt với PHP
- 2. Kiểm tra định dạng chuỗi python?
- 3. Kiểm tra xem tệp có định dạng CSV với Python
- 4. Kiểm tra xem biểu tượng có được xác định là
- 5. Kiểm tra xem chuỗi python có thể in được không
- 6. Kiểm tra xem chuỗi có chứa Asterisk (*)
- 7. Kiểm tra xem chuỗi có trống không
- 8. Kiểm tra xem chuỗi có chứa số
- 9. Làm cách nào để xác định xem XML có được định dạng tốt không?
- 10. Kiểm tra xem chuỗi có chứa chuỗi con
- 11. Kiểm tra xem nút Xml có thuộc tính
- 12. Cách kiểm tra xem JCheckBox có được kiểm tra không?
- 13. Kiểm tra xem Chuỗi có thể được chuyển đổi thành một loại nhất định trong C#
- 14. java - Cách kiểm tra xem chuỗi có phải là tên phần tử XML hợp lệ không?
- 15. Kiểm tra xem một chuỗi có hợp lệ UTF-8 được mã hóa trong Java
- 16. Kiểm tra xem cookie có được đặt
- 17. Kiểm tra xem javascript có được bật
- 18. kiểm tra xem chuỗi ngày có chứa thời gian
- 19. Kiểm tra xem một chuỗi có phải là số
- 20. T-SQL: kiểm tra định dạng email
- 21. Làm cách nào để kiểm tra xem một nút XML nhất định có tồn tại không?
- 22. Chức năng kiểm tra xem chuỗi có phải là ngày
- 23. Tạo XML được định dạng trong Scala
- 24. Kiểm tra xem hộp kiểm có được chọn với jQuery
- 25. Kiểm tra xem chuỗi có chứa số và chữ cái
- 26. Kiểm tra xem chuỗi có chứa địa chỉ email không?
- 27. Kiểm tra xem chuỗi có bắt đầu bằng XXXX
- 28. Cách kiểm tra xem chuỗi có nằm trong mảng không?
- 29. PHP kiểm tra xem tệp có chứa chuỗi
- 30. Để kiểm tra xem chuỗi có chứa từ cụ thể
Bạn có muốn phân biệt giữa XML và HTML được định dạng đúng không? –
Hi Tin Man, câu trả lời là không. Tôi có một số chuỗi phổ biến và chuỗi định dạng XML được trộn lẫn với nhau. Tôi muốn chia chúng. – mCY