Как получить доступ к данным XML внутри CDATA с помощью Powershell - PullRequest
1 голос
/ 07 августа 2020

Я новичок в Powershell, так что терпите меня, если это кажется простым вопросом. Я пытаюсь получить доступ к информации внутри тега CDATA, но не могу этого сделать. Это файл xml:

пример. xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<fooMaster>
    <fooFirst>Hello there</fooFirst>
    <fooCDATA>
        <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
        <fooChild>
            <data>
                Hello everyone
            </data>
        </fooChild>]]>
    </fooCDATA>
</fooMaster>

А это мой файл ps1:

script.ps1

$XMLfile = 'example.xml'
[XML]$file = Get-Content $XMLfile

write-Host "fooFirst contains: " $file.fooMaster.fooFirst
write-Host "data contains: " $file.fooMaster.fooCDATA."#cdata-section".fooChild.data

Read-Host -Prompt "Press Enter to exit"

$file.fooMaster.fooFirst работает отлично и отображает Hello there, однако строка ниже не работает. Я где-то читал, что добавление .#cdata-section отобразит информацию внутри тегов CDATA, и это так! но он отображает все, как если бы это был обычный текст, есть ли способ не только получить доступ к информации внутри CDATA, но и использовать ее как обычный xml.

1 Ответ

2 голосов
/ 07 августа 2020

Для доступа к элементам внутри CDATA перейдите в другую переменную:

[xml]$cdata = $file.fooMaster.fooCDATA."#cdata-section"
write-Host "data contains: $($cdata.fooChild.data.tostring().trim())
...