2016-01-30 2 views
0

Мне нужно разделить длинную строку (весь XML-файл) на </event>, чтобы каждое событие было в одном элементе созданного списка.Можно ли разделить строку на целые слова или только на отдельные символы?

Если я делаю это наивным образом:

$evList = $txtAll.Split("</event>") 

Я получаю мусор. Так что я в конечном итоге делает это таким образом:

$evList = $txtAll.replace("</event>","|").Split("|") 

замена </event> на |, а затем разделив на |.

Время от времени этот (или другой) странный символ появляется, и снова у меня беспорядок.

Есть ли способ разделить длинную строку непосредственно на </event>? Как?

ответ

2

В случае сомнений прочитайте documentation. Если вы хотите, чтобы разбить строку на подстроки, используя метод Split() вам нужно сделать Сепаратор массив строк:

$evList = $txtAll.Split([string[]]"</event>", [StringSplitOptions]::None) 

иначе разделитель аргумент интерпретируется как массив символов, так что вы хотите разделите строку на любой из символов в данной разделительной строке.

Или вы могли бы использовать -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 Командлет):

Select-Xml -Path 'C:\path\to\your.xml' -XPath '//event' | 
    Select-Object -Expand Node | 
    Select-Object -Expand InnerText 
+0

Спасибо! Вот и все, Гули – gooly