我在XML中有一个字符串,我试图将其重新转换为变量(如下所示)。
<XMLElement><![CDATA[TEXT - I - FIND - INTERESTING]]></XMLElement>
我的问题是我不了解正则表达式,并且发现很难理解如何将特殊字符转换为“字符串”,而该字符串不被解释为正则表达式字符。
方括号之间的文本可以是任何长度和任何字符;这就是我想保存到变量中的内容“文字-我-查找-有趣”。
我也想知道这是否真的是解决此问题的最佳方法。
任何支持将不胜感激。
答案 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>