goo*_*oly 3 string split powershell-2.0
我需要通过以下方式分割更长的字符串(整个 XML 文件)</event>使每个事件都位于创建的列表的一个元素中。
如果我以一种天真的方式这样做:
$evList = $txtAll.Split("</event>")
Run Code Online (Sandbox Code Playgroud)
我得到的是垃圾。所以我最终这样做了:
$evList = $txtAll.replace("</event>","|").Split("|")
Run Code Online (Sandbox Code Playgroud)
替换</event>为|,然后在 处拆分|。
偶尔这个(或其他)奇怪的角色出现,我就会再次陷入混乱。
有没有办法直接用 分割长字符串</event>?如何?
如有疑问,请阅读文档。如果您想使用以下方法在子字符串处拆分字符串,Split()则需要将分隔符设置为字符串数组:
$evList = $txtAll.Split([string[]]"</event>", [StringSplitOptions]::None)
Run Code Online (Sandbox Code Playgroud)
否则分隔符参数将被解释为字符数组,因此您将在给定分隔符字符串中的任何字符处拆分字符串。
或者您可以使用-split运算符,它允许您在正则表达式中分割字符串:
$evList = $txtAll -split "</event>"
Run Code Online (Sandbox Code Playgroud)
确保分隔符字符串不包含特殊字符,例如通过像这样转义:
$evList = $txtAll -split [regex]::Escape("</event>")
Run Code Online (Sandbox Code Playgroud)
话虽如此,如果您需要从 XML 文件中提取数据,那么最好使用实际的XML 解析器,例如:
[xml]$xml = Get-Content 'C:\path\to\your.xml'
$xml.SelectNodes('//event') | Select-Object -Expand InnerText
Run Code Online (Sandbox Code Playgroud)
或像这样(使用Select-Xmlcmdlet):
Select-Xml -Path 'C:\path\to\your.xml' -XPath '//event' |
Select-Object -Expand Node |
Select-Object -Expand InnerText
Run Code Online (Sandbox Code Playgroud)