簡體   English   中英

Powershell 正則表達式復雜模式 (XML)

[英]Powershell Regex Complex Pattern (XML)

我在 XML 中有一個字符串,我試圖將其重新運行為變量(如下所示)。

<XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>

我的問題是我對正則表達式一無所知,而且我發現很難理解如何將我的特殊字符轉換為不被解釋為正則表達式字符的“字符串”。

方括號之間的文本可以是任意長度和任意字符; 這就是我想保存到我的變量中的內容,例如“TEXT - I - FIND - INTERESTING”。

我也想知道這是否真的是解決這個問題的最佳方法。

任何支持將不勝感激。

不要對 XML 使用正則表達式!

在 PowerShell 中使用 XML 的優勢在於我們可以使用 XPath 來搜索和導航文檔。 在您的情況下,我將使用text()選擇器來解析 CDATA 部分的內部值:

$xml = [xml]@'
<root>
    <XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>
</root>
'@

$interestingString = $xml.SelectSingleNode('//XMLElement/text()').Value

//XMLElement意思是“在任何地方查找和<XMLElement>

text() 函數很好。 這是另一種方式。 即使節點不在頂部,這也應該有效。

get-content -raw file.xml | select-xml '//XMLElement' | 
  % { $_.node.'#cdata-section' }

TEXT - I - FIND - INTERESTING

請注意,在 cdata 部分中將忽略標簽。 例子:

'<script>
  <![CDATA[<message>Welcome to TutorialsPoint</message>]]>
</script>' | select-xml '/script' | % { $_.node.'#cdata-section' }

<message>Welcome to TutorialsPoint</message>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM