html - Windows PowerShell 解析 HTML 本地文件

标签 html regex powershell xpath

我想使用 PowerShell 从 HTML 文件构建一个数组。

我正在使用一个脚本,该脚本从本地的 Mozilla Firefox Developer Edition(我正在下载索引文件)下载 HTML 文件,我想解析它以获取 select 元素内的选项元素的值,这些元素具有id 设置为 id_country。

有人建议我为此使用 XPath,但我不知道如何解析文件并根据结果构建数组。也许使用正则表达式可能是一种解决方法。

HTML 文件在这里:

http://pastebin.com/b8cShFLA

我想要这里选项元素的所有值:

<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/

相关文章:

javascript - jQuery 更改内容后 CSS 渐变看起来不正确

Python re.search 首先按照结果

php - 文档写入问题

javascript - 使用纯 JavaScript 在页面加载时重新定位 div

php - 正则表达式:将所有 URL 设为绝对

c# - 如何使用正则表达式检查电话号码

PowerShell--使用 IP 地址和子网掩码计算网络 ID

Powershell LDAP - physicalDeliveryOfficeName 未显示

powershell - 如何使 Powershell 模块中的变量可供该模块中的其他函数访问?

html - 修复了动态标题图像上的可见高度值