2012-02-09 5 views
-1

Je dois faire d'une voiture un nœud enfant d'une piste. J'ai regardé en ligne, et j'ai essayé plusieurs façons, mais je ne peux pas le faire fonctionner correctement.Comment ajouter un nouveau nœud enfant à un nœud enfant existant

Voici mon fichier xml que je génère.

<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> 

Cependant, il s'agit du format attendu.

<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> 

C'est ma méthode qui génère le fichier XML. Notez que la première ligne du message est générée ailleurs et je ne peux pas changer cela.

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")); 
} 

Pour référence c'est la méthode AppendNewChild

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

Répondre

1

Il est probable que vous annexant la voiture au mauvais noeud.

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")); 
} 

Notez également que votre format exemple est prévu xml incorrect (nom de l'élément racine ne correspond pas - RTDX vs RDTE).

+0

Merci beaucoup, cela semblait résoudre mon problème! En ce qui concerne le format de correspondance manquante, j'ai accidentellement posté l'ancien format. Je vais le mettre à jour maintenant. – ensantos91

Questions connexes