вложенный XML разбор в powershell - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь использовать powershell для анализа файла XML, чтобы получить значение указанного поля c. Я сталкиваюсь с некоторыми проблемами с получением вложенных объектов, пытаясь как с Select- XML, так и с [xml] $ cn = Get-Content файлом. xml

Мне было интересно, сможет ли кто-нибудь взглянуть и предложить руку?

<DentalContainer version="2019-1">
  <Object name="MainObject" type="TDM_Container">
    <Object name="OrderList" type="TDM_List_Order">
      <List name="Items">
        <Object type="TDM_Item_Order">
          <Property name="ClientID" value="91494"/>
          <Property name="ClientOrderNo" value=""/>
          <Property name="ClientContactPerson" value=""/>
          <Property name="OrderImportanceID" value="oiNormal"/>
          <Property name="Patient_RefNo" value=""/>
          <Property name="Patient_FirstName" value=""/>
          <Property name="Patient_LastName" value="testest"/>
          <Property name="DeliveryAddress1" value=""/>
          <Property name="DeliveryAddress2" value=""/>
          <Property name="DeliveryZip" value=""/>
          <Property name="DeliveryCity" value=""/>
          <Property name="DeliveryState" value=""/>
          <Property name="DeliveryCountryID" value=""/>
          <Property name="DeliveryType" value=""/>
          <Property name="ManufName" value="XYZ"/>
          <Property name="OperatorName" value="SIMPLE"/>
        </Object>
      </List>
    </Object>    
    <Property name="ImportForceOverwrite" value="false"/>
    <Property name="ImportForceClean" value="false"/>
    <Property name="EmptyRecycleBin" value="false"/>
  </Object>
</DentalContainer>

1 Ответ

1 голос
/ 04 февраля 2020

Учитывая ваш файл xml, вы можете использовать XPath для поиска определенных значений или свойств из него. Поскольку ваш вопрос расплывчат, как и то, что вас интересовало, ниже приведен пример доступа к атрибутам свойства (имя и значение).

[xml]$cn = Get-Content C:\temp\xml.txt

# Single Node
$OrderImportanceID = $cn.DocumentElement.SelectSingleNode("//Property[@name='OrderImportanceID']").Attributes["value"].Value

# All Nodes that match Element with Property tag.
$allProperties = $cn.DocumentElement.SelectNodes("//Property")

# You Can loop all the properties and print each name and value
foreach($prop in $allProperties) {
    Write-output "Property Name: $($prop.Name), Value: $($prop.value)"
}

Синтаксическая ссылка XPath

...