我需要让汽车成为赛道的子节点。我已经在网上看过,尝试了几种不同的方式,但我无法让它正常工作。
这是我生成的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);
}
答案 0 :(得分:1)
可能是因为您将汽车附加到错误的节点。
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)。