Как добавить новый дочерний узел в существующий дочерний узел - PullRequest
0 голосов
/ 09 февраля 2012

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

Вот мой xml-файл, который я генерирую.

<RTDX msgid="3642728b-b75c-4196-9fad-5c4e882c3a9d" msgtime="0001-01-01 00:00:00.000" xmlns="http://www.aps-technology.com">
    <EventTime>2012-02-09 19:38:13.802</EventTime>
    <Track name="P7E Switch" />
    <Car name="CSXT8423" sequence="4" orientation="A" axles="1" />
</RTDX>

, однако это ожидаемый формат.

<RTDX msgid="3642728b-b75c-4196-9fad-5c4e882c3a9d" msgtime="0001-01-01 00:00:00.000" xmlns="http://www.aps-technology.com">
    <EventTime>2011-12-07 05:00:03.579</EventTime>
    <Track name="P7E Switch">
        <Car name="CSXT8423" sequence="1" orientation="A"/>
    </Track>
</RTDX>

Это мой метод генерации XML-файла.Обратите внимание, что первая строка сообщения генерируется в другом месте, и я не могу это изменить.

protected override void SaveApsXml(System.Xml.XmlNode node)
{
    base.SaveApsXml(node);            
    node.AppendNewChild("EventTime").SetElementText(this.EventTime.ToString(ApsMessage.DateTimeFormat));
    node.AppendNewChild("Track").SetAttribute("name", this.Track); //Pretty sure this is whats causing the problem
    this.SequenceCar.SaveApsXml(node.AppendNewChild("Car"));
}

Для справки это метод AppendNewChild

public static XmlNode AppendNewChild(this XmlNode node, string name)
{
    XmlNode child = node.OwnerDocument.CreateElement(name, node.NamespaceURI);
    return node.AppendChild(child);
}

1 Ответ

1 голос
/ 09 февраля 2012

Скорее всего, вы добавляете машину не к тому узлу.

protected override void SaveApsXml(System.Xml.XmlNode node)
{
    base.SaveApsXml(node);            
    node.AppendNewChild("EventTime").SetElementText(this.EventTime.ToString(ApsMessage.DateTimeFormat));
    var track = node.AppendNewChild("Track");
    track.SetAttribute("name", this.Track);
    this.SequenceCar.SaveApsXml(track.AppendNewChild("Car"));
}

Также обратите внимание, что ожидаемый пример формата неверный xml (имя корневого элемента не совпадает - RTDX против RTDT).

...