如何将HTML转换为XHTML?

23

我需要将 HTML 文档转换为有效的 XML,最好是 XHTML。有什么最好的方法可以做到这一点吗?是否有任何工具包/库/示例等,可以帮助我完成这项任务?

更明确一些,我的应用程序必须在运行时自动进行转换。我不是在寻找一个手动将某些页面移动到 XHTML 的工具。

7个回答

24

使用HTML Tidy将HTML转换为XML

可下载的二进制文件

JRoppert,根据您的需求,我猜您可能需要看一下源代码

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

很不幸,第一个链接已经失效了。但是似乎内容仍然可以在这里找到:https://www.ibm.com/developerworks/library/x-tiptidy/index.html - uni
要实际使用Tidy创建XHTML,就像所期望的那样,看起来必须传递“-asxml”标志,否则您将获得非验证输出。 - nmr

6

4
使用Html2Xhtml进行.NET 4.0开发:
内存中的字符串转换:
var xhtml = Html2Xhtml.RunAsFilter(stdin => stdin.Write(html)).ReadToEnd();

内存中字符串到XDocument的转换:

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

请查看http://corsis.sourceforge.net/index.php/Html2Xhtml获取更多相关信息。


我有完全相同的问题,并使用了这个答案,它非常有效。特别是对于转换为XElement。 - Beaker
如何在 .netcore 3.1 中使用它 - user10997800
@amirkian - 请查看http://corsis.sourceforge.net/index.php/Html2Xhtml。 - Cetin Sert
@CetinSert 它根本不起作用。 - user10997800

4

Validator.nu HTML解析器附带了一个HTML2XML示例程序,它使用HTML5解析算法和信息集强制规则进行转换。


2

http://corsis.sourceforge.net/index.php/Html2Xhtml是一个.NET 4.0库,用于将HTML转换为XHTML,根据GPLv2或更高版本许可。

我在欧盟大型在线数据库的本地重建中测试了Html2Xhtml。Tidy/Tidy.NET大多数情况下甚至无法产生有效的输出,Chilkat的HTML-to-XML速度有点慢,并且产生了奇怪的结果(错位、缺失、无法解释的元素)。为了找到一个免费、快速和可靠的转换工具,我创建了这个库。它比我测试过的所有其他库都要快2-4倍。

Html2Xhtml与LINQ to XML的强大结合,是所有大规模数据提取和网络爬虫方案的优秀工具。


2

0

最简单的方法是设置您的Visual Studio IDE以识别您需要进行的更改。 您可以在Visual Studio 2008中执行此操作,方法如下: 工具,选项,文本编辑器,HTML,验证,然后选择适当的目标。 可能是XHTML 1.1或XHTML 1.0 Transitional。

有关不同类型的一些信息,请阅读: http://msdn.microsoft.com/en-us/library/aa479043.aspx

然后您需要处理页面上突出显示的要点。


抱歉,我的问题表述不够清晰。我需要在运行时自动进行转换。 - JRoppert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接