【发布时间】:2014-12-15 10:28:55
【问题描述】:
我有一个类似结构化 HTML 文件的目录(给出了两个示例):
文件-1.html
<html>
<body>
<div class="foo">foo</div>
<div class="bar"><div><p>bar</p></div></div>
<div class="baz">baz</div>
</body>
</html>
文件-2.html
<html>
<body>
<div class="foo">foo</div>
<div class="bar"><div><p>apple<br>banana</p></div></div>
<div class="baz">baz</div>
</body>
</html>
我正在尝试创建一个 Powershell 脚本来返回从所有 html 中删除的 bar div 的内容:
对于 File-1.html:bar
对于 File-2.html:apple banana
我现在有:
$directory = "C:\Users\Public\Documents\Sandbox\HTML"
foreach ($file in Get-ChildItem($directory))
{
$content = Get-Content "$directory\$file"
echo $content.ParsedHtml.getElementById("bar").innerHTML
}
这会返回一个错误:
You cannot call a method on a null-valued expression.
At C:\Users\Public\Documents\Sandbox\parse-html.ps1:9 char:2
+ echo $content.ParsedHtml.getElementById("bar").innerHTML`
我不明白这个错误,因为bar 是一个存在的 HTML 元素。
我做错了什么?
【问题讨论】:
-
$content 有值吗?该错误告诉您,您正在调用方法的变量是 null
-
是的,当我执行
echo $content时,会返回 File-1.html 的 HTML。 -
好的,$content.ParsedHtml 怎么样?
-
因为 $content 没有名为 ParsedHtml 的属性,所以我认为 powershell 默认不支持解析 html 文件。您可以尝试使用htmlagilitypack.codeplex.com。或者您可以将该行视为字符串并尝试使用 REGEX 获取标记的内容
-
哈哈 :) 对不起,我自己不是正则表达式大师 :) 我能给你的唯一提示是尝试 regex101.com,它会显示语法错误和其他东西。也看这里:stackoverflow.com/questions/11306596/…
标签: html powershell xml-parsing html-parsing