2017-07-31 81 views
0

我有这样的XML文档,在这里我想去的地方的innerText与.XML获取XML节点,与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> 

我想读dokumentUrl与“的结束而结束阅读documenturl .xml'。
我尝试使用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(); 

,但它不工作,任何人都可以请帮我

回答

0

试试这个:

XDocument xPlatformXml = new XDocument(mydoc); 
XElement xel = xPlatformXml.Element("_source") 
          .Elements("dokumenter") 
          .Where(x => x.Element("dokumentUrl").Value.EndsWith(".xml")) 
          .SingleOrDefault(); 
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(); 
+0

它的工作,谢谢:) –

0

当使用t他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"));