我想使用 PowerShell 从 HTML 文件构建一个数组。
我正在使用一个脚本,该脚本从本地的 Mozilla Firefox Developer Edition(我正在下载索引文件)下载 HTML 文件,我想解析它以获取 select 元素内的选项元素的值,这些元素具有id 设置为 id_country。
有人建议我为此使用 XPath,但我不知道如何解析文件并根据结果构建数组。也许使用正则表达式可能是一种解决方法。
HTML 文件在这里:
我想要这里选项元素的所有值:
<select aria-required="true" id="id_country" name="country" required="required">
<option value="af">Afghanistan</option>
<option value="al">Albania</option>
<option value="dz">Algeria</option>
<option value="as">American Samoa</option>
<option value="ad">Andorra</option>
...
我对 PowerShell 还很陌生,这就是为什么我不太了解我可能会使用的不同解决方案的原因。我需要一些非常快的东西,因为它是软件包安装程序的一部分。
基本上,脚本会尝试查看是否有与用户计算机的语言环境相匹配的安装程序,如果没有,它将默认为英语,这就是为什么我需要从该列表中获取值以检查可用的 firefox dev语言环境。
问候, 啊
最佳答案
我没有看到要修复的代码示例,所以我会制作一个。
如果它是一个远程 html,我会使用 Invoke-WebRequest
,但这对本地文件不太适用。
对于本地文件的解析,我建议使用 HTML Agility Pack解析 HTML 文件,然后使用 xPath 获取您要查找的选项。例如。
Add-Type -Path .\HTMLAgilityPack\HtmlAgilityPack.dll
$url = (get-item .\b8cShFLA.html).FullName
$doc = New-Object HtmlAgilityPack.HtmlDocument
$doc.LoadHtml((get-content $url))
#Create hashtable to store data in
$langs = @{}
$doc.DocumentNode.SelectSingleNode("//select[@name='country']").SelectNodes("option") | ForEach-Object {
$short = $_.Attributes[0].Value
$long = $_.NextSibling.InnerText
#Store data in hashtable
$langs[$short] = $long
}
$langs
输出:
Name Value
---- -----
rw Rwanda
tv Tuvalu
to Tonga
pn Pitcairn
bh Bahrain
lc Saint Lucia
关于html - Windows PowerShell 解析 HTML 本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27494140/