Как прочитать элемент в файле XML в PowerShell? - PullRequest
0 голосов
/ 11 марта 2019

У меня XML-файл выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<INITIAL>
    <FB1>a</FB1>
    <FB2>b</FB2>
    <FB3>c</FB3>
    <FB4>d</FB4>
    <FB5>e</FB5>
    <FB6>f</FB6>
    <FB7>g</FB7>
    <FB8>h</FB8>
    <FB9>i</FB9>

</INITIAL>

Я просто хочу прочитать элемент a в i и преобразовать его в строку, например:

abcdefghi

Ответы [ 3 ]

0 голосов
/ 11 марта 2019

Вы можете использовать выражение XPath для получения нужных вам узлов, а затем использовать оператор -join для объединения строк.

Выражение XPath /INITIAL/* означает каждый элемент непосредственно внутри INITIALэлемент на верхнем уровне.Тщательный отбор данных, которые вам действительно нужны, поможет вам, если позже кто-нибудь решит каким-либо образом расширить формат данных.

PS> $Data = New-Object Xml
PS> $Data.Load((Resolve-Path file.xml))

PS> $Data.SelectNodes("/INITIAL/*")."#text" -join ""
frfsftfufvfwfhgKfg

Протестировано с Windows PowerShell 5.1 в Windows 10.

0 голосов
/ 11 марта 2019

Предполагая, что этот XML:

<INITIAL>
    <FB1>fr</FB1>
    <FB2>fs</FB2>
    <FB3>...</FB3>
</INITIAL>

выборки InnerText элемента контейнера будет достаточно:

Write-Host $xml.DocumentElement.InnerText

Это напечатало бы frfs....

Если в вашем фактическом XML-контейнере не самый верхний элемент, замените DocumentElement на .SelectSingleNode('some/xpath').

0 голосов
/ 11 марта 2019

Сначала вы создаете System.Xml.XmlDocument из него. Вот пример:

$theXml = [xml](gc $xmlPath)
$theXml.GetType().fullname

Как только он у вас есть, вы можете играть по своему усмотрению! - В вашем примере вам нужно объединить значения дочерних элементов. В Интернете вы найдете много примеров того, как объединить строковые значения из массива - пример

$theXml.INITIAL.GetEnumerator() # this gives you enumeration of values in children to the 'INITIAL' element. 

Надеюсь, это поможет.

Редактировать: И да, ваш xml был сломан - я предполагаю, что он добавил закрывающие теги, такие как </FB1> для всех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...