2014-10-20 45 views
0

我有着相似的結構化的HTML文件的目錄(給出兩個例子):返回一個HTML div的內容使用PowerShell

文件的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腳本返回bar div的內容,從所有的HTML剝離:

對於文件1.HTML:bar 對於文件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元素。

我在做什麼錯?

+1

沒有$內容具有價值?該錯誤告訴您,您正在調用方法的變量爲空 – Paul 2014-10-20 12:36:13

+0

是的,當我執行'echo $ content'時,將返回File-1.html的HTML。 – Pr0no 2014-10-20 12:39:26

+1

ok $ content.ParsedHtml怎麼樣? – Paul 2014-10-20 12:41:27

回答

0

你可以嘗試這樣的事情:

$content = Get-Content File-1.html 
$xmlContent = [xml]$content 

$bar = $xmlContent.html.body.div | where {$_.div -eq 'bar'} 

Write-Output $bar.InnerXML