C# 使用LINQ读取XML不同节点

C# 使用LINQ读取XML不同节点,c#,xml,linq,xml-parsing,linq-to-xml,C#,Xml,Linq,Xml Parsing,Linq To Xml,我有一个字符串中的以下XML。我向web服务发送了一个请求,他们向我返回了一个XmlNode。现在我有了xmlNode.InnerXml,它是以下XML: <Response> <Vehicle> ... </Vehicle> <Premiums> <Premium> <ID>78601</ID> <Name&g

我有一个字符串中的以下XML。我向web服务发送了一个请求,他们向我返回了一个XmlNode。现在我有了xmlNode.InnerXml,它是以下XML:

<Response>
    <Vehicle>
        ...
    </Vehicle>
    <Premiums>
        <Premium>
          <ID>78601</ID>
          <Name>Premium I</Name>
          <Desc>Description I</Desc>
          <Surcharges>
            <Surcharge>
              <SurchargeID>20</SurchargeID>
              <SurchargeAmount>50.00</SurchargeAmount>
              <SurchargeSelected>TRUE</SurchargeSelected>
            </Surcharge>
          </Surcharges>
        </Premium>
        <Premium>
          <ID>78598</ID>
          <Name>Premium II</Name>
          <Desc>Description II</Desc>
          <Surcharges>
            <Surcharge>
              <SurchargeID>15</SurchargeID>
              <SurchargeAmount>25.00</SurchargeAmount>
              <SurchargeSelected>FALSE</SurchargeSelected>
            </Surcharge>
            <Surcharge>
              <SurchargeID>20</SurchargeID>
              <SurchargeAmount>50.00</SurchargeAmount>
              <SurchargeSelected>TRUE</SurchargeSelected>
            </Surcharge>
          </Surcharges>
        </Premium>
    </Premiums>
</Response>

提前感谢任何能帮助我的人!!:)

借助XPath的一点帮助:

var _premiumsList = (from s in xDoc.XPathSelectElements("/Response/Premiums/Premium/Surcharges/Surcharge")
                     select new
                     {
                         ID = (int)s.Element("SurchargeID"),
                         Amount = (decimal)s.Element("SurchargeAmount"),
                         Selected = (bool)s.Element("SurchargeSelected")
                     }).Distinct().ToList();
需要在文件顶部使用System.Xml.XPath

它使用了这样一个事实,即匿名类型在默认情况下定义了
Equals
GetHashCode

由于匿名类型上的
Equals
GetHashCode
方法是根据属性的
Equals
GetHashCode
方法定义的,因此相同匿名类型的两个实例只有在其所有属性都相等时才是相等的


借助XPath的一点帮助:

var _premiumsList = (from s in xDoc.XPathSelectElements("/Response/Premiums/Premium/Surcharges/Surcharge")
                     select new
                     {
                         ID = (int)s.Element("SurchargeID"),
                         Amount = (decimal)s.Element("SurchargeAmount"),
                         Selected = (bool)s.Element("SurchargeSelected")
                     }).Distinct().ToList();
需要在文件顶部使用System.Xml.XPath

它使用了这样一个事实,即匿名类型在默认情况下定义了
Equals
GetHashCode

由于匿名类型上的
Equals
GetHashCode
方法是根据属性的
Equals
GetHashCode
方法定义的,因此相同匿名类型的两个实例只有在其所有属性都相等时才是相等的


借助XPath的一点帮助:

var _premiumsList = (from s in xDoc.XPathSelectElements("/Response/Premiums/Premium/Surcharges/Surcharge")
                     select new
                     {
                         ID = (int)s.Element("SurchargeID"),
                         Amount = (decimal)s.Element("SurchargeAmount"),
                         Selected = (bool)s.Element("SurchargeSelected")
                     }).Distinct().ToList();
需要在文件顶部使用System.Xml.XPath

它使用了这样一个事实,即匿名类型在默认情况下定义了
Equals
GetHashCode

由于匿名类型上的
Equals
GetHashCode
方法是根据属性的
Equals
GetHashCode
方法定义的,因此相同匿名类型的两个实例只有在其所有属性都相等时才是相等的


借助XPath的一点帮助:

var _premiumsList = (from s in xDoc.XPathSelectElements("/Response/Premiums/Premium/Surcharges/Surcharge")
                     select new
                     {
                         ID = (int)s.Element("SurchargeID"),
                         Amount = (decimal)s.Element("SurchargeAmount"),
                         Selected = (bool)s.Element("SurchargeSelected")
                     }).Distinct().ToList();
需要在文件顶部使用System.Xml.XPath

它使用了这样一个事实,即匿名类型在默认情况下定义了
Equals
GetHashCode

由于匿名类型上的
Equals
GetHashCode
方法是根据属性的
Equals
GetHashCode
方法定义的,因此相同匿名类型的两个实例只有在其所有属性都相等时才是相等的


谢谢你的详细解释。但是,我收到一个错误:
“System.Xml.Linq.XDocument”不包含“XPathSelectElements”的定义,并且找不到接受“System.Xml.Linq.XDocument”类型的第一个参数的扩展方法“XPathSelectElements”(是否缺少using指令或程序集引用?)
在文件顶部使用System.Xml.XPath添加
。最后一件事——当我将Xml加载到
XDocument.Parse(xmlString)
中时,我遇到了一个错误。错误是有多个根元素
——有什么想法吗?是的,您的字符串没有包含正确的XML文档。XML规范要求文档只有一个根元素。我应该改为使用
XML.OuterXml
,这就是问题所在。感谢您的详细解释。但是,我收到一个错误:
“System.Xml.Linq.XDocument”不包含“XPathSelectElements”的定义,并且找不到接受“System.Xml.Linq.XDocument”类型的第一个参数的扩展方法“XPathSelectElements”(是否缺少using指令或程序集引用?)
在文件顶部使用System.Xml.XPath添加
。最后一件事——当我将Xml加载到
XDocument.Parse(xmlString)
中时,我遇到了一个错误。错误是有多个根元素
——有什么想法吗?是的,您的字符串没有包含正确的XML文档。XML规范要求文档只有一个根元素。我应该改为使用
XML.OuterXml
,这就是问题所在。感谢您的详细解释。但是,我收到一个错误:
“System.Xml.Linq.XDocument”不包含“XPathSelectElements”的定义,并且找不到接受“System.Xml.Linq.XDocument”类型的第一个参数的扩展方法“XPathSelectElements”(是否缺少using指令或程序集引用?)
在文件顶部使用System.Xml.XPath添加
。最后一件事——当我将Xml加载到
XDocument.Parse(xmlString)
中时,我遇到了一个错误。错误是有多个根元素
——有什么想法吗?是的,您的字符串没有包含正确的XML文档。XML规范要求文档只有一个根元素。我应该改为使用
XML.OuterXml
,这就是问题所在。感谢您的详细解释。但是,我收到一个错误:
“System.Xml.Linq.XDocument”不包含“XPathSelectElements”的定义,并且找不到接受“System.Xml.Linq.XDocument”类型的第一个参数的扩展方法“XPathSelectElements”(是否缺少using指令或程序集引用?)
在文件顶部使用System.Xml.XPath添加
。最后一件事——当我将Xml加载到
XDocument.Parse(xmlString)
中时,我遇到了一个错误。错误是有多个根元素
——有什么想法吗?是的,您的字符串没有包含正确的XML文档。XML规范要求文档只有一个根元素。我应该改为使用
XML.OuterXml
,这就是问题所在。