C# 从xml响应中提取节点

C# 从xml响应中提取节点,c#,xml,C#,Xml,下面是我从Web服务生成的响应。 我希望这样做,我只希望从这个响应中得到PresentationElements节点。 有什么帮助吗?如何实现此查询 <?xml version="1.0"?> <GetContentResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ExtensionData /

下面是我从Web服务生成的响应。 我希望这样做,我只希望从这个响应中得到
PresentationElements
节点。 有什么帮助吗?如何实现此查询

<?xml version="1.0"?>
<GetContentResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ExtensionData />
  <GetContentResult>
    <ExtensionData />
    <Code>0</Code>
    <Value>Success</Value>
  </GetContentResult>
  <PresentationElements>
    <PresentationElement>
      <ExtensionData />
      <ContentReference>Product View Pack</ContentReference>
      <ID>SHOPPING_ELEMENT:10400044</ID>
      <Name>View Pack PE</Name>
      <PresentationContents>
        <PresentationContent>
          <ExtensionData />
          <Content>View Pack</Content>
          <ContentType>TEXT</ContentType>
          <Language>ENGLISH</Language>
          <Medium>COMPUTER_BROWSER</Medium>
          <Name>Name</Name>
        </PresentationContent>
        <PresentationContent>
          <ExtensionData />
          <Content>Have more control of your home's security and lighting with View Pack from XFINITY Home.</Content>
          <ContentType>TEXT</ContentType>
          <Language>ENGLISH</Language>
          <Medium>COMPUTER_BROWSER</Medium>
          <Name>Description</Name>
        </PresentationContent>
        <PresentationContent>
          <ExtensionData />
          <Content>/images/shopping/devices/xh/view-pack-2.jpg</Content>
          <ContentType>TEXT</ContentType>
          <Language>ENGLISH</Language>
          <Medium>COMPUTER_BROWSER</Medium>
          <Name>Image</Name>
        </PresentationContent>
        <PresentationContent>
          <ExtensionData />
          <Content>The View Pack includes:
2 Lighting / Appliance Controllers
2 Indoor / Outdoor Cameras</Content>
          <ContentType>TEXT</ContentType>
          <Language>ENGLISH</Language>
          <Medium>COMPUTER_BROWSER</Medium>
          <Name>Feature1</Name>
        </PresentationContent>
      </PresentationContents>
    </PresentationElement>
  </PresentationElements>
</GetContentResponse>

您可以使用
System.Xml.Linq.XDocument

//Initialize the XDocument
XDocument doc = XDocument.Parse(yourString);

//your query
var desiredNodes = doc.Descendants("PresentationElements");

很简单,您是否尝试过:

XDocument xml = XDocument.Load("... xml");
var nodes = (from n in xml.Descendants("PresentationElements")
                        select n).ToList();
您还可以使用以下方法将每个单独的节点投影到匿名类型:

select new 
{
  ContentReference = (string)n.Element("ContentReference").Value,
  .... etc
}

您可以使用XPath扩展

var xdoc = XDocument.Parse(response);
XElement presentations = xdoc.XPathSelectElement("//PresentationElements");

可能是因为它不是一个文件,而是一个服务的响应而被否决;但我只能猜测。也许downvoter应该知道,您可以从字符串创建XDocument实例,而不仅仅是从文件。我已经试过上述解决办法。。但它返回一个IEnumerable。因此,这会引起一些问题。可能是我没有铸造它。ToList()是的,您必须通过调用
ToList()
ToArray()
来枚举它。