PowerShell的 HTML解析不会把
视为具有闭合标签

前端开发 2026-07-12

下面是一个简化的示例:

$test = "<footer><p>foo<span>bar</span></p></footer>"
$html = New-Object -ComObject "HTMLFile"
$html.IHTMLDocument2_write($test)

$footer = $html.getElementsByTagName("footer")
$footer.item(0).outerHTML

$p = $html.getElementsByTagName("p")
$p.item(0).outerHTML

当我运行这个时,我得到如下输出:

<FOOTER>
<P>foo<SPAN>bar</SPAN></P>

这是个错误吗,还是我只是漏看了什么?

解决方案

虽然不能确定这是否算作一个错误,但你使用的解析器确实很旧。若你使用一个更新的解析器,例如 Html Agility Pack,你可以通过安装 PSParseHTML模块 来获取它,它能够显示整个HTML:

$test = '<footer><p>foo<span>bar</span></p></footer>'
$html = $test | ConvertFrom-HTML
$html.SelectSingleNode('footer').OuterHtml
# Outputs: <footer><p>foo<span>bar</span></p></footer>

如果问题中所示的HTML够简单,你不妨使用来自 XmlDocument 的XML解析器:

$test = '<footer><p>foo<span>bar</span></p></footer>'
$xml = [xml] $test
$xml.SelectSingleNode('footer').OuterXml
# Outputs: <footer><p>foo<span>bar</span></p></footer>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章