PowerShell将网页内容转换为XmlDocument时解析失败问题咨询
[xml] 强制转换失败的核心原因
[xml] 类型对应的是标准XML文档解析器,要求输入内容必须严格符合XML语法规范,而你拿到的pinvoke.net页面是HTML文档,HTML的语法规则比XML宽松很多,二者的不兼容点就是报错的根源:
- 布尔属性的语法差异:你遇到的第一个报错就来自这里。HTML支持无值的布尔属性,比如
async、defer、checked、disabled这类属性,只要写了属性名就代表生效,不需要显式赋值。但XML要求所有属性必须遵循属性名="属性值"的格式,解析器读到<script async之后会等待=给async赋值,结果下一个token是src,因此直接抛出语法错误。 - 还有很多其他HTML语法都无法被XML解析器兼容:
- HTML允许部分单标签不闭合,比如
<img>、<br>、<input>,XML要求所有标签必须成对出现,或者用自闭合语法<img /> - HTML允许属性值不加引号,比如
<div class=container>,XML要求所有属性值必须用引号包裹 - HTML对标签名、属性名大小写不敏感,XML则严格区分大小写
- HTML允许部分单标签不闭合,比如
额外建议
ConvertTo-Xml的作用是把.NET对象序列化为XML格式,不能用来修正不规范的HTML语法,因此用它处理原始页面内容不会解决解析问题。
如果要解析HTML页面,不需要强行转XML,Invoke-WebRequest返回的响应对象自带ParsedHtml属性,已经是解析完成的DOM对象,可以直接提取你需要的内容。
内容的提问来源于stack exchange,提问作者codewario
相关产品推荐
相关产品推荐

