xml sample
<?xml version="1.0" encoding="UTF-8"?>
<CUSTOMERS xml:lang="en">
<CUSTOMER CREATED_DATE="2020-10-16 13:21:09.0" GROUP_ID="" ID="1509999">
<NAME>
<TITLE></TITLE>
<FIRST_NAME>John</FIRST_NAME>
<LAST_NAME>Smith</LAST_NAME>
</NAME>
<GENDER/>
<DATE_OF_BIRTH/>
<CONTACT_DETAILS>
<TELEPHONE MARKETING_OPT_IN="F" TYPE="MOBILE">0123456789</TELEPHONE>
<EMAIL MARKETING_OPT_IN="F">[email protected]</EMAIL>
</CONTACT_DETAILS>
<ATTRIBUTE NAME="theCompany-News and offers on theCompany Womenswear_OPT_EMAIL">T</ATTRIBUTE>
<ATTRIBUTE NAME="Email Soft Opt In_OPT_EMAIL">F</ATTRIBUTE>
<ATTRIBUTE NAME="REGISTERED_ON_WEBSITE">T</ATTRIBUTE>
</CUSTOMER>
</CUSTOMERS>
I have inherited an Azure Powershell function which builds a list of values from XML file. I need to add some code to access this value:
<ATTRIBUTE NAME="Email Soft Opt In_OPT_EMAIL">F</ATTRIBUTE>
This is the Powershell Code I have so far
[xml]$xml = Get-Content C:\Users\Jason2\Desktop\XMLfolder\theSample.xml
$xml
$CustomerListFull = @()
foreach ($customer in $xml.CUSTOMERS.CUSTOMER)
{ $BuildList = New-Object -TypeName psobject
$BuildList | Add-Member -MemberType NoteProperty -Name TITLE -Value $customer.NAME.TITLE.Trim()
$BuildList | Add-Member -MemberType NoteProperty -Name FIRSTNAME -Value $customer.NAME.FIRST_NAME.Trim()
$BuildList | Add-Member -MemberType NoteProperty -Name LASTNAME -Value $customer.NAME.LAST_NAME.Trim()
$BuildList | Add-Member -MemberType NoteProperty -Name EMAILCONSENT -Value "0"
$BuildList | Add-Member -MemberType NoteProperty -Name EMAILSOFTOPTIN -Value "2"
if ($customer.ATTRIBUTE.NAME -like "*OPT_EMAIL") {
foreach ($value in $customer.ATTRIBUTE.NAME) {
if ($value -match "theCompany-News and offers on theCompany Womenswear_OPT_EMAIL") {
$BuildList.EMAILCONSENT = "1"
}
if ($value -match "Email Soft Opt In_OPT_EMAIL") {
$BuildList.EMAILSOFTOPTIN = $customer.ATTRIBUTE.'#text'
}
}
}
$CustomerListFull += $BuildList
}
$CustomerListFull
which is incorrectly giving me all three Attribute Name values (into field EMAILSOFTOPTIN)
TITLE :
FIRSTNAME : John
LASTNAME : Smith
EMAILCONSENT : 1
EMAILSOFTOPTIN : {T, F, T}
I have tried several things to try and access the value, user marsze yesterday showed me nodes which is great but I can't seem to make it work in my forloop, I'm failing miserably.
$BuildList.EMAILSOFTOPTIN = $customer.SelectNodes("//*[local-name()='ATTRIBUTE'][@NAME='Email Soft Opt In_OPT_EMAIL']").InnerText
$BuildList.EMAILSOFTOPTIN = $customer.[ATTRIBUTE].[NAME='Email Soft Opt In_OPT_EMAIL').InnerText
$nodes = $xml.SelectNodes("//*[local-name()='ATTRIBUTE'][@NAME='Email Soft Opt In_OPT_EMAIL']")
$BuildList.EMAILSOFTOPTIN = $nodes.InnerText
Please help to put me out of my misery