Как добавить XML дочерние узлы к нескольким родительским узлам - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть xml файл, подобный этому.

<ArrayOfALternateUnitModel>
<ALternateUnitModel>
<UnitId>1048</UnitId>
<Name> CARTON</Name>
</ALternateUnitModel>

<ALternateUnitModel>
<UnitId>2063</UnitId>
<Name> PACKET</Name>
</ALternateUnitModel>
</ArrayOfALternateUnitModel>

, что мне нужно.

<ArrayOfALternateUnitModel>
<ALternateUnitModel>
<UnitId>1048</UnitId>
<Name> CARTON</Name>
<NewChild>new child</NewChild>
</ALternateUnitModel>

<ALternateUnitModel>
<UnitId>2063</UnitId>
<Name> PACKET</Name>
<NewChild>new child</NewChild>
</ALternateUnitModel>
</ArrayOfALternateUnitModel>

Мой код выглядит следующим образом.

xmlDoc.Load(xmlStream);
XmlElement childElement = xmlDoc.CreateElement("NewChild");
childElement.InnerText = "new child";
XmlNode parentNode = xmlDoc.SelectSingleNode("ArrayOfALternateUnitModel/ALternateUnitModel");
parentNode.AppendChild(childElement);

Вывод идет следующим образом.

<ArrayOfALternateUnitModel>
<ALternateUnitModel>
<UnitId>1048</UnitId>
<Name> CARTON</Name>
<NewChild>new child</NewChild>
</ALternateUnitModel>

<ALternateUnitModel>
<UnitId>2063</UnitId>
<Name> PACKET</Name>
</ALternateUnitModel>
</ArrayOfALternateUnitModel>

Во втором узле не добавляются дочерние узлы. Как добавить дочерний элемент ко всем родительским узлам?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Две проблемы:

  • Нельзя добавить один элемент нескольким родителям. Элемент может иметь только одного родителя.
  • Вам нужно выбрать все целевые элементы, а не только один.

Это должно работать:

xmlDoc.Load(xmlStream);
foreach (XmlNode parent in xmlDoc.SelectNodes("ArrayOfALternateUnitModel/ALternateUnitModel"))
{
    XmlElement childElement = xmlDoc.CreateElement("NewChild");
    childElement.InnerText = "new child";

    parent.AppendChild(childElement);
}

0 голосов
/ 02 апреля 2020

Вы берете только один первый узел, поэтому вы можете попробовать изменить эти строки:

XmlNode parentNode = xmlDoc.SelectSingleNode("ArrayOfALternateUnitModel/ALternateUnitModel");
parentNode.AppendChild(childElement);

Вкл.

XmlNodeList parentNodes = xmlDoc.SelectNodes("ArrayOfALternateUnitModel/ALternateUnitModel");
foreach (XmlNode parentNode in parentNodes)
    parentNode.AppendChild(childElement);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...