Powershell Regex复杂模式(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>

相关内容

  • 没有找到相关文章

最新更新