Zastanawiam się, czy istnieje funkcja w języku Ruby, taka jak is_xml?(string)
, aby określić, czy dany ciąg ma format XML.Sprawdź, czy ciąg znaków jest sformatowany w formacie XML.
Odpowiedz
Nokogiri na parse
używa prostego testu regex szuka <html>
w próbie ustalenia, czy dane, które mają być analizowane jest HTML lub XML:
string =~ /^s*<[^Hh>]*html/ # Probably html
Coś podobnego, szukając deklaracji XML będzie punktem wyjścia:
string = '<?xml version="1.0"?><foo><bar></bar></foo>'
string.strip[/\A<\?xml/]
=> "<?xml"
Jeśli zwraca coś innego niż nil
, ciąg zawiera deklarację XML. Ważne jest, aby to przetestować, ponieważ pusty łańcuch zmyli kolejne kroki.
Nokogiri::XML('').errors.empty?
=> true
Nokogiri posiada także metodę errors
, która będzie zwracać tablicę błędów po próbie analizowania dokumentu, który jest uszkodzony. Testowanie, które dla dowolnej wielkości pomogłoby:
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
byłaby prawdą, jeśli dokument jest poprawny pod względem składniowym.
właśnie testowane Nokogiri aby sprawdzić, czy to może odróżnić regularny ciąg vs. prawda XML:
[2] (pry) main: 0> doc = Nokogiri::XML('foo').errors
[
[0] #<Nokogiri::XML::SyntaxError: Start tag expected, '<' not found>
]
Tak, można pętli plików i sortować je do XML i zakaz -XML łatwo:
require 'nokogiri'
[
'',
'foo',
'<xml></xml>'
].group_by{ |s| (s.strip > '') && Nokogiri::XML(s).errors.empty? }
=> {false=>["", "foo"], true=>["<xml></xml>"]}
Przypisywanie wynik group_by
do zmiennej, a będziesz mieć hash można sprawdzić za nieprzestrzeganie XML (false
) lub XML (true
).
Świetnie! Szczegóły są naprawdę pomocne. – mCY
Dodałem nieco więcej kodu, który może ci się przydać. –
Nie ma takiej funkcji w klasie String Ruby lub rozszerzeń Smyczkowych aktywne wsparcie, ale można użyć Nokogiri do detect errors in XML:
begin
bad_doc = Nokogiri::XML(badly_formed) { |config| config.strict }
rescue Nokogiri::XML::SyntaxError => e
puts "caught exception: #{e}"
end
To nam niewiele mówi: 'Nokogiri :: XML ('') {| config | config.strict} => #
@ TinMan w prawo, link ma również przykład użycia .errors. 'puts bad_doc.errors' – nurettin
Dzięki za odpowiedź. Teraz wiem, co robić ~ – mCY
- 1. Sprawdź, czy ciąg znaków jest obrazem
- 2. Jak sprawdzić, czy ciąg znaków jest xml?
- 3. Ruby, sprawdź, czy ciąg znaków jest prawidłowy?
- 4. Sprawdź, czy ciąg znaków jest adresem URL
- 5. Sprawdź, czy ciąg znaków interpunkcyjnych jest
- 6. Jak uzyskać sformatowany ciąg znaków w OCaml?
- 7. Tekst sformatowany w formacie HTML
- 8. Sprawdź, czy ciąg znaków jest CAŁKOWITĄ liczbą liter w PHP
- 9. Sprawdź, czy ciąg znaków UTF-8 jest poprawny w Qt
- 10. Wyświetl sformatowany ciąg HTML
- 11. Sprawdź, czy ciąg znaków Pythona jest możliwy do wydrukowania.
- 12. IOS: sprawdź, czy ciąg znaków jest pustym ciągiem
- 13. Jak utworzyć sformatowany zlokalizowany ciąg?
- 14. IE10 XML nie jest sformatowany wewnątrz iframe
- 15. Sprawdź, czy ciąg jest w ArrayList ciągów
- 16. Sprawdź, czy ciąg zawiera tylko znaki ASCII?
- 17. jsf wyjściowy tekst sformatowany w formacie HTML
- 18. Log4net sformatowany w formacie html SmtpAppender
- 19. Sprawdź, czy ciąg zawiera podłańcuch
- 20. Jak przekonwertować datę na sformatowany ciąg w VB.net?
- 21. PHP: Proste, sprawdź, czy ciąg jest hexem?
- 22. Sprawdź, czy ciąg jest Integer z jQuery
- 23. Pisanie sformatowany XML z XmlWriter
- 24. Sprawdź, czy ciąg znaków jest równy jednemu z łańcuchów znaków (z wyrażeniem regularnym).
- 25. RequestMapping w formacie xml
- 26. Czy jest prawidłowym znakiem w formacie XML?
- 27. Ruby Sprawdź warunek, czy ciąg zawiera wiele różnych ciągów znaków?
- 28. Jak wykryć, czy ciąg znaków jest w formacie adresu URL przy użyciu javascript?
- 29. Sprawdź, czy ciąg znaków jest pusty w skrypcie akcji, podobnie do String.Empty w .net
- 30. Sprawdź, czy ciąg ruby zawiera białe spacje.
Czy chcesz rozróżnić kod XML i poprawnie uformowany kod HTML? –
Cześć Tin Man, odpowiedź brzmi: nie. Mam kilka wspólnych ciągów i wymieszane ze sobą ciągi w formacie XML. Chcę je podzielić. – mCY