C# 从具有特定名称的子节点获取InnerXML/InnerText。最佳做法

C# 从具有特定名称的子节点获取InnerXML/InnerText。最佳做法,c#,xml,serialization,xml-parsing,C#,Xml,Serialization,Xml Parsing,我有一个看起来像这样的XML(缩写) 我的问题是,有没有一种方法可以减少这种错误的发生?例如(引用元素名称?): 这种场景的最佳实践是什么?您可以使用带有适当XPath字符串的SelectSingleNode()作为参数,根据节点名称选择子节点,例如: LapDistance = ConvertToDouble(lap.SelectSingleNode("DistanceMeters").InnerXml) 如果不确定所有节点都有相应的子元素,则需要进行空检查 有没有不使用XmlSeriali

我有一个看起来像这样的XML(缩写)

我的问题是,有没有一种方法可以减少这种错误的发生?例如(引用元素名称?):


这种场景的最佳实践是什么?

您可以使用带有适当XPath字符串的
SelectSingleNode()
作为参数,根据节点名称选择子节点,例如:

LapDistance = ConvertToDouble(lap.SelectSingleNode("DistanceMeters").InnerXml)

如果不确定所有
节点都有相应的子元素,则需要进行空检查

有没有不使用XmlSerialization或LINQ to XML的理由?
        XmlNodeList lapList = doc.GetElementsByTagName("Lap");

        activity = new Activity();

        foreach (XmlNode lap in lapList)
        {
            var split = new Lap
            {
                StartTime = DateTime.Parse(lap.Attributes[0].Value),
                LapDistance = ConvertToDouble(lap.ChildNodes.Item(1).InnerXml),
                LapMaximunSpeed = ConvertToDouble(lap.ChildNodes.Item(2).InnerXml),
                LapCalories = ConvertToInt(lap.ChildNodes.Item(3).InnerXml),
                LapAverageHeartRate = ConvertToInt(lap.ChildNodes.Item(4).InnerText),
                LapMaximumHeartRate = ConvertToInt(lap.ChildNodes.Item(5).InnerText),
            };
LapDistance = ConvertToDouble(lap.ChildNodes.Item["DistanceMeters"].InnerXml),
LapDistance = ConvertToDouble(lap.SelectSingleNode("DistanceMeters").InnerXml)