Powershell提取本地html标记

Powershell提取本地html标记,powershell,Powershell,我是powershell的新手,请容忍。我曾尝试在powershell中解析html表中标记之间的字符串, 这是HTML <head> <title>HTML TABLE</title> </head><body> <table> <colgroup><col/><col/></colgroup>

我是powershell的新手,请容忍。我曾尝试在powershell中解析html表中标记之间的字符串, 这是HTML

    <head>
        <title>HTML TABLE</title>
        </head><body>
        <table>
        <colgroup><col/><col/></colgroup>
        <tr><th>TestcaseName</th><th>Status</th></tr>
        <tr><td>abcd </td><td>First </td></tr>
        <tr><td>xyz </td><td>Second </td></tr>
        <tr><td>pqr </td><td>Third </td></tr>
        </table>
        </body>
</html>
但结果是

<tr><td>abcd </td><td>
<tr><td>xyz </td><td> 
<tr><td>pqr </td><td>
abcd
xyz
pqr
任何人都可以提到为什么标签也作为输出,以及如何避免这种情况。此外,我还想向每个数组元素添加文本,例如:
abcd,xyz
等,请提及这些元素,因为它们涉及特殊字符。

尝试以下操作:

(?<=\<td\>)(.*?(?=\</td\>))
这样做将隐式地将其从匹配转换为字符串;你已经被警告了。我不认为有办法在保持匹配的同时做到这一点,但我的假设可能是错误的。

试试这个:

(?<=\<td\>)(.*?(?=\</td\>))

这样做将隐式地将其从匹配转换为字符串;你已经被警告了。我认为在保持匹配的同时没有办法做到这一点,但我的假设可能是错误的。

如果文件始终是有效的xml,您可以将其转换为xml并执行以下操作:

[xml] $xml = Get-Content $path

$xml.SelectNodes("//tr") |
  Where-Object {$_.ChildNodes.Count -gt 0 -and $_.ChildNodes[0].Name -eq 'td'} |
  ForEach-Object {$_.ChildNodes[0].InnerText}

您可以在ForEach对象内部的结果中附加任何您喜欢的内容

如果文件始终是有效的xml,您可以将其转换为xml并执行以下操作:

[xml] $xml = Get-Content $path

$xml.SelectNodes("//tr") |
  Where-Object {$_.ChildNodes.Count -gt 0 -and $_.ChildNodes[0].Name -eq 'td'} |
  ForEach-Object {$_.ChildNodes[0].InnerText}
您可以在ForEach对象内将任何您喜欢的内容附加到结果中

[xml] $xml = Get-Content $path

$xml.SelectNodes("//tr") |
  Where-Object {$_.ChildNodes.Count -gt 0 -and $_.ChildNodes[0].Name -eq 'td'} |
  ForEach-Object {$_.ChildNodes[0].InnerText}