2008-09-26 21 views
21

Potrzebuję przekonwertować dokumenty HTML na poprawny XML, najlepiej XHTML. Jaki jest najlepszy sposób na zrobienie tego? Czy ktokolwiek zna zestaw narzędzi/bibliotekę/próbkę/... cokolwiek, co pomaga mi wykonać to zadanie?Jak przekonwertować HTML na XHTML?

Aby być nieco bardziej przejrzystym, moja aplikacja musi wykonać konwersję automatycznie w czasie wykonywania. Nie szukam narzędzia, które pomoże mi ręcznie przenieść niektóre strony do XHTML.

Odpowiedz

23

Convert from HTML to XML with HTML Tidy

Downloadable Binaries

JRoppert, do potrzeb użytkownika, myślę, warto spojrzeć na Sources

c:\temp>tidy -help 
tidy [option...] [file...] [option...] [file...] 
Utility to clean up and pretty print HTML/XHTML/XML 
see http://tidy.sourceforge.net/ 

Options for HTML Tidy for Windows released on 14 February 2006: 

File manipulation 
----------------- 
-output <file>, -o write output to the specified <file> 
<file> 
-config <file>  set configuration options from the specified <file> 
-file <file>, -f write errors to the specified <file> 
<file> 
-modify, -m   modify the original input files 

Processing directives 
--------------------- 
-indent, -i   indent element content 
-wrap <column>, -w wrap text at the specified <column>. 0 is assumed if 
<column>   <column> is missing. When this option is omitted, the 
        default of the configuration option "wrap" applies. 
-upper, -u   force tags to upper case 
-clean, -c   replace FONT, NOBR and CENTER tags by CSS 
-bare, -b   strip out smart quotes and em dashes, etc. 
-numeric, -n  output numeric rather than named entities 
-errors, -e   only show errors 
-quiet, -q   suppress nonessential output 
-omit    omit optional end tags 
-xml    specify the input is well formed XML 
-asxml, -asxhtml convert HTML to well formed XHTML 
-ashtml    force XHTML to well formed HTML 
-access <level>  do additional accessibility checks (<level> = 0, 1, 2, 3). 
        0 is assumed if <level> is missing. 

Character encodings 
------------------- 
-raw    output values above 127 without conversion to entities 
-ascii    use ISO-8859-1 for input, US-ASCII for output 
-latin0    use ISO-8859-15 for input, US-ASCII for output 
-latin1    use ISO-8859-1 for both input and output 
-iso2022   use ISO-2022 for both input and output 
-utf8    use UTF-8 for both input and output 
-mac    use MacRoman for input, US-ASCII for output 
-win1252   use Windows-1252 for input, US-ASCII for output 
-ibm858    use IBM-858 (CP850+Euro) for input, US-ASCII for output 
-utf16le   use UTF-16LE for both input and output 
-utf16be   use UTF-16BE for both input and output 
-utf16    use UTF-16 for both input and output 
-big5    use Big5 for both input and output 
-shiftjis   use Shift_JIS for both input and output 
-language <lang> set the two-letter language code <lang> (for future use) 

Miscellaneous 
------------- 
-version, -v  show the version of Tidy 
-help, -h, -?  list the command line options 
-xml-help   list the command line options in XML format 
-help-config  list all configuration options 
-xml-config   list all configuration options in XML format 
-show-config  list the current configuration settings 

Use --blah blarg for any configuration option "blah" with argument "blarg" 

Input/Output default to stdin/stdout respectively 
Single letter options apart from -f may be combined 
as in: tidy -f errs.txt -imu foo.html 
For further info on HTML see http://www.w3.org/MarkUp 
0

Najprostszym sposobem jest ustawienie w Visual Studio IDE w celu identyfikacji zmiany, które musisz wprowadzić. Możesz to zrobić w Visual Studio 2008, przechodząc do: Narzędzia, opcje, edytor tekstu, HTML, sprawdzanie poprawności i wybór odpowiedniego celu. Prawdopodobnie XHTML 1.1 lub XHTML 1.0 Transitional.

Dla niektórych informacji na temat różnych typów, czytany: http://msdn.microsoft.com/en-us/library/aa479043.aspx

Następnie trzeba pracować przez punkty wyróżnionych na stronie.

+0

Niestety, nie było jasne w moim pytaniu. Muszę wykonać konwersję automatycznie w czasie wykonywania. – JRoppert

4

Wersja jest dostarczana z programem przykładowym HTML2XML, który przeprowadza konwersję przy użyciu algorytmu analizy parsowania HTML5 i reguł wymuszania informacji.

4

Zastosowanie Html2Xhtml dla .NET 4.0:

w pamięci ciąg do łańcucha konwersji:

var xhtml = Html2Xhtml.RunAsFilter(stdin => stdin.Write(html)).ReadToEnd(); 

w pamięci ciąg do XDocument konwersja:

var xdoc = Html2Xhtml.RunAsFilter(stdin => stdin.Write(html)).ReadToXDocument(); 

See http://corsis.sourceforge.net/index.php/Html2Xhtml, aby uzyskać więcej informacji.

+0

Miałem dokładnie to samo pytanie i użyłem tej odpowiedzi, działa pięknie. Szczególnie w przypadku konwersji do XElement. – Beaker

2

http://corsis.sourceforge.net/index.php/Html2Xhtml http://corsis.sourceforge.net/index.php/Html2Xhtml

Html2Xhtml jest .NET 4.0 biblioteki do konwersji HTML do XHTML licencją GPLv2 lub powyżej.

Przetestowałem Html2Xhtml w lokalnej przebudowie dużej internetowej bazy danych Unii Europejskiej. Tidy/Tidy.NET nie generowałaby nawet prawidłowego wyniku, Chilkat HTML-to-XML był nieco powolny i dawał dziwne wyniki (niewłaściwie umieszczone, brakujące, niewytłumaczalne elementy). Próbując znaleźć darmowe, szybkie i niezawodne narzędzie do konwersji, stworzyłem tę bibliotekę. Konwertuje 2 - 4 razy szybciej niż wszystkie inne testowane przeze mnie biblioteki.

Html2Xhtml, w połączeniu z mocą LINQ do XML, jest doskonałym narzędziem do wszystkich wielkoskalowych operacji pobierania danych i indeksowania stron internetowych.

2

można przekonwertować HTML do XHTML z schludny pliku wykonywalnego:

schludny -asxhtml -numeric < indeksu.html> index.xhml

możesz sprawdzić implementację C# here.

Powiązane problemy