проблема с .Net xml importnode - PullRequest
       9

проблема с .Net xml importnode

1 голос
/ 04 августа 2009

Я пытаюсь создать скрипт powershell, который использует некоторый XML. У меня есть документ XML, в котором я пытаюсь добавить некоторые значения с адресами электронной почты. Готовый документ XML должен иметь этот формат: (Я только показываю соответствующую часть XML здесь)

<emailAddresses> 
    <value>bob@bob.com</value> 
    <value>kenny@bob.com</value> 
    <value>roger@bob.com</value> 
</emailAddresses> 

ТАК, в powershell я пытаюсь сделать это как тест, который не проходит:

$newNumber = [xml] '<value>555-1215</value>'
$newNode = $Request2.ImportNode($newNumber.value, $true)
$emailnode.AppendChild($newNode)

После некоторого чтения я понял, что если я сделаю это, то получится:

$newNumber = [xml] '<value name="flubber">555-1215</value>'
$newNode = $Request2.ImportNode($newNumber.value, $true)
$emailnode.AppendChild($newNode)

Итак, я застрял. Я начинаю задумываться, стоит ли мне использовать другую функцию вместо importnode, когда у меня есть несколько ключей с одинаковым именем, но разными значениями.

Как вы, ребята, наверняка уже поняли, я не эксперт в xml. Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 05 августа 2009

Как вы указали, есть некоторые фрагменты XML, которые были исключены, поэтому я создал собственное представление, которое, надеюсь, адаптируется к версии реального мира .

Прежде всего ...

$newNumber.value

... имеет тип string. ImportNode () ожидает тип XmlNode в качестве первого параметра. Чтобы получить это, вы, вероятно, можете вызвать такую ​​функцию, как get_DocumentElement () и / или SelectSingleNode () .

Например:

$Request2 = [xml]'<root><emailAddresses/></root>'
$newNumber = [xml]'<value>555-1215</value>'
$newNode = $Request2.ImportNode( $newNumber.get_DocumentElement(), $true )
$Request2.get_DocumentElement().SelectSingleNode( './emailAddresses' ).AppendChild( $newNode )

Это должно сделать результаты, которые вы ищете.

0 голосов
/ 05 августа 2009

Попробуйте этот подход:

PS> $xml = [xml]'<addresses/>'
PS> $newNode = $xml.CreateElement('value')
PS> $newNode.InnerText = 'bob@bob.com'
PS> $xml.DocumentElement.AppendChild($newNode) > $null
PS> $newNode = $xml.CreateElement('value')
PS> $newNode.InnerText = 'johnny@bob.com'
PS> $xml.DocumentElement.AppendChild($newNode) > $null
PS> $xml.DocumentElement.OuterXml
<addresses><value>bob@bob.com</value><value>johnny@bob.com</value></addresses>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...