#powershell
#powershell
Вопрос:
У меня есть тестовый xml, и я хочу получить значение из этой строки АТРИБУТ NAME=»News- offers_OPT_EMAIL»>F, чтобы я мог проверить значение F или T
если я сделаю это ниже, я смогу получить заголовок, но как мне получить указанное выше значение строки.
[xml]$xml = Get-Content testFile.xml
$xml
$xml.CUSTOMERS.CUSTOMER.NAME.TITLE
пример XML-кода
<?xml version="1.0" encoding="UTF-8"?>
<CUSTOMERS xml:lang="en">
<CUSTOMER CREATED_DATE="2018-01-01 05:18:53.0" GROUP_ID="" ID="95656565">
<NAME>
<TITLE>M</TITLE>
<FIRST_NAME>Joe</FIRST_NAME>
<LAST_NAME>Smith</LAST_NAME>
</NAME>
<GENDER/>
<DATE_OF_BIRTH/>
<ADDRESS>
<ADDRESS_LINE_1>1 White House</ADDRESS_LINE_1>
<ADDRESS_LINE_2>Old Ave</ADDRESS_LINE_2>
<ADDRESS_LINE_3/>
<TOWNCITY>LONDON</TOWNCITY>
<COUNTY/>
<POSTCODE>18659</POSTCODE>
<COUNTRY>France</COUNTRY>
</ADDRESS>
<ADDRESS>
<ADDRESS_LINE_1>175 avenue de la division Leclerc</ADDRESS_LINE_1>
<ADDRESS_LINE_2/>
<ADDRESS_LINE_3/>
<TOWNCITY>Antony</TOWNCITY>
<COUNTY/>
<POSTCODE>92160</POSTCODE>
<COUNTRY>France</COUNTRY>
</ADDRESS>
<CONTACT_DETAILS>
<TELEPHONE MARKETING_OPT_IN="F" TYPE="MOBILE">0123456789</TELEPHONE>
<EMAIL MARKETING_OPT_IN="F">johnsmith@gmail.com</EMAIL>
</CONTACT_DETAILS>
<ATTRIBUTE NAME="News- offers_OPT_EMAIL">F</ATTRIBUTE>
<NOTE>NA</NOTE>
</CUSTOMER>
Комментарии:
1. Также добавить это в Powershell
Ответ №1:
Вы могли бы использовать SelectSingleNode или SelectNodes с выражением XPath. Существует несколько вариантов достижения желаемого, в зависимости от ваших намерений, но это будет один из способов сделать это:
# finde the nodes
$nodes = $xml.SelectNodes("//*[local-name()='ATTRIBUTE'][@NAME='News- offers_OPT_EMAIL']")
# get value
$nodes.InnerText
Или, если значение атрибута не имеет значения, просто выполните:
$xml.customers.customer.attribute.'#text'
Комментарии:
1. И последнее, если бы я хотел создать массив из всех значений, помогло бы это для вышеуказанного поля $myArrayList.MYOFFERS = $xml. КЛИЕНТЫ. CUSTOMER.NAME [‘News- offers_OPT_EMAIL’].’#текст’
2. @RogerClerkwell Первый опубликованный мной вариант уже должен возвращать массив значений, если в нем содержится более одного результата
$nodes