Как вставить элемент в дочерний узел - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь вставить дополнительный «кластер» в существующую топологию XML. Оригинальный XML:

[xml]$XmlObj = '<?xml version="1.0"?>
<Topology>
<Cluster Fqdn="db001.local">
<ClusterId SiteId="1" Number="1"/>
<Machine Fqdn="db001.local" UpgradeDomain="db001.local"/>
</Cluster>
</Topology>'

Все хорошо. Теперь я хочу добавить еще один кластер:

[xml]$NewCluster = '<Cluster Fqdn="sp001.local">
<ClusterId SiteId="1" Number="1"/>
<Machine Fqdn="sp001.local" UpgradeDomain="sp001.local"/>
</Cluster>'

Я пробовал:

$XmlObj.Topology.Cluster.AppendChild($NewCluster.Cluster)

Возвращает ошибку. "The node to be inserted is from a different document context."

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Как говорится в сообщении об ошибке, вы не можете просто добавить дочерний узел непосредственно из другого документа.

Сначала вам нужно будет импортировать его в целевой контекст документа:

$ImportedCluster = $XmlObj.ImportNode($NewCluster.Cluster, $true)

и теперь мы можем добавить это! Я предполагаю, что вы хотели добавить новый узел Cluster к дочерним узлам Topology, а не к существующему узлу Cluster:

$XmlObj.Topology.AppendChild($ImportedCluster)
0 голосов
/ 03 января 2019

Что делает AppendChild(), по сути: изменяет свойство ParentNode узла XML. И это может быть успешным, только если родитель и потомок существуют в одном и том же документе.

Вы можете импортировать сторонних узлов в текущий документ. Это создает клон, который затем принадлежит новому документу, который может быть присоединен к новому родителю без проблем.

$newClusterClone = $XmlObj.ImportNode($NewCluster.Cluster, $true)
Topology.Cluster.AppendChild($newClusterClone)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...