获取XML节点的属性值(带名称空间)

时间:2013-06-27 21:58:21

标签: c# xml linq-to-xml

这是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”,但为什么不会?

1 个答案:

答案 0 :(得分: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;