Powershell正则表达式复杂模式(XML)

时间:2020-03-25 21:55:36

标签: regex xml powershell select-string

我在XML中有一个字符串,我试图将其重新转换为变量(如下所示)。

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

我的问题是我不了解正则表达式,并且发现很难理解如何将特殊字符转换为“字符串”,而该字符串不被解释为正则表达式字符。

方括号之间的文本可以是任何长度和任何字符;这就是我想保存到变量中的内容“文字-我-查找-有趣”。

我也想知道这是否真的是解决此问题的最佳方法。

任何支持将不胜感激。

2 个答案:

答案 0 :(得分:3)

请勿将正则表达式用于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> 无处不在

答案 1 :(得分:0)

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>
相关问题