我需要通过</event>
拆分更长的字符串(整个XML文件),以便在创建的列表的一个元素中包含每个事件。
如果我以天真的方式做到这一点:
$evList = $txtAll.Split("</event>")
我得到了垃圾。所以我最终这样做了:
$evList = $txtAll.replace("</event>","|").Split("|")
将</event>
替换为|
,然后在|
拆分。
偶尔出现这个(或其他)奇怪的角色,我又乱糟糟。
有没有办法直接按</event>
分割长字符串?怎么样?
答案 0 :(得分:2)
如有疑问,请阅读documentation。如果要使用Split()
方法在子字符串处拆分字符串,则需要使分隔符成为字符串数组:
$evList = $txtAll.Split([string[]]"</event>", [StringSplitOptions]::None)
否则separator参数将被解释为一个字符数组,因此您可以将字符串拆分为给定分隔符字符串中的任何字符。
或者您可以使用-split
operator,这样您就可以将字符串拆分为正则表达式:
$evList = $txtAll -split "</event>"
确保分隔符字符串不包含特殊字符,例如通过这样逃避它:
$evList = $txtAll -split [regex]::Escape("</event>")
话虽如此,如果您需要从XML文件中提取数据,那么使用实际的XML parser会更好。像这样:
[xml]$xml = Get-Content 'C:\path\to\your.xml'
$xml.SelectNodes('//event') | Select-Object -Expand InnerText
或者像这样(使用Select-Xml
cmdlet):
Select-Xml -Path 'C:\path\to\your.xml' -XPath '//event' |
Select-Object -Expand Node |
Select-Object -Expand InnerText