2013-06-27 259 views
1

這裏的XML文件獲得價值

<?xml version="1.0" encoding="UTF-8"?> 
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> 
<rootfiles> 
<rootfile media-type="application/oebps-package+xml" full-path="EPUB/wasteland.opf"/> 
</rootfiles> 
</container> 

這裏是我的代碼

 XElement XmlElement; 
     XmlElement = XElement.Load(containerXml.Stream); 


     TextBlock tbl= new TextBlock(); 
     foreach (XElement level1Element in XmlElement.Elements("rootfiles")) 
     { 
      foreach (XElement level2Element in level1Element.Elements("rootfile")) 
      { 
       tbl.Text = level2Element.Attribute("full-path").Value; 
      } 
     } 

的文本塊應更改爲「EPUB/wasteland.opf」,但爲什麼它不會?

+0

你知道你是在一個循環中分配的文本?這意味着我知道只有最後一個值會保留 –

+0

,但只有一個值。應該是那個,不是嗎? –

+0

只用'SingleOrDefault()'方法的'FirstOrDefault()'得到單值 –

回答

1

你缺少命名空間:

var xdoc = XDocument.Load(containerXml.Stream); 
XNamespace ns = "urn:oasis:names:tc:opendocument:xmlns:container"; 
var path = xdoc.Descendants(ns + "rootfile") 
       .Select(r => (string)r.Attribute("full-path")) 
       .FirstOrDefault(); 

而且你可以指定路徑文本塊:

tbl.Text = path;