获取基于文本值的XML节点,以XML结尾

时间:2017-07-31 17:44:24

标签: c# xml linq

我有这个xml文档,我想阅读文档,其中innertext以.xml结尾

<Root>
  <hits>
    <total>4</total>
    <max_score />
    <hits>
      <_index>offentliggoerelser-prod-20161006</_index>
      <_type>offentliggoerelse</_type>
      <_id>urn:ofk:oid:23640715</_id>
      <_score />
      <_source>
        <dokumenter>
          <dokumentUrl>url.pdf</dokumentUrl>
          <dokumentMimeType>application/pdf</dokumentMimeType>
          <dokumentType>KONCERNREGNSKAB_FOR_OVERLIGGENDE_MODER</dokumentType>
        </dokumenter>
        <dokumenter>
          <dokumentUrl>url.xml</dokumentUrl>
          <dokumentMimeType>application/xml</dokumentMimeType>
          <dokumentType>AARSRAPPORT</dokumentType>
        </dokumenter>
        <dokumenter>
          <dokumentUrl>url.pdf</dokumentUrl>
          <dokumentMimeType>application/pdf</dokumentMimeType>
          <dokumentType>AARSRAPPORT</dokumentType>
        </dokumenter>
      </_source>
      <sort>1490355849989</sort>
    </hits>
  </hits>
</Root>

我正在尝试阅读仅以“.xml”结尾的dokumentUrl 我尝试使用LINQ

XDocument mydoc = XDocument.Load(file);    
XDocument xPlatformXml = new XDocument(mydoc);
XElement xel = xPlatformXml.Element("_source")
                           .Elements("dokumenter")
                           .Where(x => x.Element("dokumentUrl").Value == ".xml")
                           .SingleOrDefault();

但它不起作用,任何人都可以帮助我

3 个答案:

答案 0 :(得分:2)

您可以检查您的descendants node是否具有以.xml

结尾的值
XDocument mydoc = XDocument.Load(file);
XDocument xPlatformXml = new XDocument(mydoc);
XElement xel = xPlatformXml.Root.Descendants()
                                    .Where(x => x.Name == "dokumentUrl" && x.Value.EndsWith(".xml"))
                                    .SingleOrDefault();

答案 1 :(得分:0)

试试这个:

XDocument xPlatformXml = new XDocument(mydoc);
XElement xel = xPlatformXml.Element("_source")
                           .Elements("dokumenter")
                           .Where(x => x.Element("dokumentUrl").Value.EndsWith(".xml"))
                           .SingleOrDefault();

答案 2 :(得分:0)

使用Element方法时,必须指定从文档根目录到所需节点的完整路径。例如:

var xel = xPlatformXml.Element("Root")
    .Element("hits")
    .Element("hits")
    .Element("_source")
    .Elements("dokumenter")
    .Elements("dokumentUrl")
    .SingleOrDefault(x => x.Value.EndsWith(".xml"));

或者您可以使用Descendants方法。它更简洁,但可能会影响性能。

var xel2 = xPlatformXml.Descendants("dokumentUrl")
    .SingleOrDefault(x => x.Value.EndsWith(".xml"));