gpt4 book ai didi

html - 在 Powershell 中解析 html 实体

转载 作者:行者123 更新时间:2023-12-02 23:28:48 27 4
gpt4 key购买 nike

我正在通过 Powershell 使用 Microsoft Team Foundation Server。
我想要做的任务是为“测试用例”类型的给定工作项获取和设置“步骤”。

出于某种我不知道的原因,TFS 将诸如 HTML 之类的信息存储在 XML 中,其中 HTML 元素是使用 HTML 实体编写的,以免与 XML 混淆。

下面是一个例子:

<steps id="0" last="3">
<step id="2" type="ValidateStep">
<parameterizedString isformatted="true">
&lt;DIV&gt;&lt;P&gt;I do this and that&lt;/P&gt;&lt;/DIV&gt;
</parameterizedString>
<parameterizedString isformatted="true">
&lt;DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;
</parameterizedString>
<description/>
</step>
<step id="3" type="ActionStep">
<parameterizedString isformatted="true">
&lt;DIV&gt;&lt;DIV&gt;&lt;P&gt;I do something else &lt;BR/&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;
</parameterizedString>
<parameterizedString isformatted="true">
&lt;DIV&gt;&lt;P&gt;This happens &lt;BR/&gt;&lt;/P&gt;&lt;/DIV&gt;
</parameterizedString>
<description/>
</step>
</steps>

显示为:
Screenshot of how TFS renders the steps for the test case

如何获得每个项目的“裸文本”?例如, This happens&lt;DIV&gt;&lt;P&gt;This happens &lt;BR/&gt;&lt;/P&gt;&lt;/DIV&gt; .
我必须编写自己的解析器还是已经有一些可以使用的东西?

最佳答案

System.Web 里有东西可以帮助您的命名空间:

PS> add-type -AssemblyName system.web
PS> [System.Web.HttpUtility]::HtmlDecode("Baskin &amp; Robbins")
Baskin & Robbins

更新

我再次阅读了您的问题,您想要的不止这些。如果您不熟悉 xml 和 html 语义,这有点棘手,所以这里有一个我为您拼凑的脚本。我希望你可以根据自己的需要修改它。

add-type -AssemblyName system.web

$raw = @'
<steps id="0" last="3">
<step id="2" type="ValidateStep">
<parameterizedString isformatted="true">
&lt;DIV&gt;&lt;P&gt;I do this and that&lt;/P&gt;&lt;/DIV&gt;
</parameterizedString>
<parameterizedString isformatted="true">
&lt;DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;
</parameterizedString>
<description/>
</step>
<step id="3" type="ActionStep">
<parameterizedString isformatted="true">
&lt;DIV&gt;&lt;DIV&gt;&lt;P&gt;I do something else &lt;BR/&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;
</parameterizedString>
<parameterizedString isformatted="true">
&lt;DIV&gt;&lt;P&gt;This happens &lt;BR/&gt;&lt;/P&gt;&lt;/DIV&gt;
</parameterizedString>
<description/>
</step>
</steps>
'@

$xml = [xml]$raw

$xml.steps.step | foreach-object {
write-host ('Processing {0}...' -f $_.type)

$_.parameterizedString | foreach-object {
# decode html entities
$html = [System.Web.HttpUtility]::HtmlDecode($_.innerText)

# let's hope the html is balanced and valid xhtml (matching begin/end tags)
# assumption is that the innermost <P> wraps the desired text
# match with xpath
$text = ([xml]$html).SelectSingleNode('//P/text()').value

write-host "Text: '$text'"
}
}

关于html - 在 Powershell 中解析 html 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com