2

我正在将一些ruby脚本转换为posh

> gem install nokogiri

> irb

> require 'nokogiri'

> $html = Nokogiri::HTML("<div><img src='//127.0.0.1:5598/user/first.png' />
                       <img src='//127.0.0.1:5598/user/second.png' /></div>")

> $html.xpath('//img[contains(@src,"first")]')

# Output: <img src='//127.0.0.1:5598/user/first.png' />

在 PowerShell 中,我有:

> [System.Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq")

> [System.Reflection.Assembly]::LoadWithPartialName("System.Xml.XPath")

> $html = [System.Xml.Linq.XDocument]::Parse("<div>
                       <img src='//127.0.0.1:5598/user/first.png' />
                       <img src='//127.0.0.1:5598/user/second.png' /></div>")

> [System.Xml.XPath.Extensions]::XPathSelectElement($html, 
                                  '//img[contains(@src,"first")]')

# It displays the properties of XElement type object

如何获得相同的输出?

有没有更好的方法在 PowerShell v.4 中解析 html?

4

3 回答 3

2

仅使用 CMDLET 查询 XML 的另一种方法:

$xml = [xml]@"
<div>
<img src='//127.0.0.1:5598/user/first.png' />
<img src='//127.0.0.1:5598/user/second.png' />
</div>
"@

(select-xml -xml $xml -xpath '//img[contains(@src,"first")]' ) | % { $_.node.src }
于 2013-07-11T12:27:06.680 回答
2

只需添加.ToString(),您将获得相同的输出。

这是一个更简单的替代方案,它产生相同的效果:

$html = [xml] "<div><img src='//127.0.0.1:5598/user/first.png' />
                    <img src='//127.0.0.1:5598/user/second.png' /></div>"
$html.SelectSingleNode('//img[contains(@src,"first")]').OuterXml

甚至

($html.div.img | ?{ $_.src -match 'first' }).outerxml

请注意,我假设您正在XML按照自己的 PowerShell 示例进行处理(我不习惯处理HTML)......</p>

于 2013-07-11T12:05:18.920 回答
1

使用invoke-webrequest(PS V3)的另一种选择:

$ie = new-object -com "InternetExplorer.Application"
$ie.Navigate("c:\temp\test.html")
$html=$ie.Document
$html.images|% { if ($_.src -match "first") {echo $_.outerHTML}}

请注意,如果它不是本地文件,您可以使用:

 $html = Invoke-WebRequest "http://yourURL"

然后解析$html.ParsedHtml.body

于 2013-07-11T12:15:43.457 回答