XML LINQ查询不返回任何数据

时间:2010-12-16 08:48:52

标签: c# linq .net-3.5 linq-to-xml xml-namespaces

我今天尝试使用LINQ to XML,但我并不是很成功。 当我使用命名空间时,我没有得到任何数据。

这是(简化的)xml:

<?xml version="1.0" encoding="UTF-8" ?>
<Message xmlns="urn:protocols:format13">
    <data>
    testdata
    </data>
</Message>

我尝试使用(xmlmsg是一个字符串)来获取数据:

XElement root = XElement.Parse(xmlmsg);
XNamespace ns = root.Attribute("xmlns").ToString();

List<XElement> datalist =
       (from desc in root.Descendants(ns + "data")
         select desc).ToList<XElement>();

但是数据保持者仍然是空的。如果我不使用命名空间,它就可以工作。

之前我使用过XmlReader,它可以很好地处理命名空间。但是由于我的xml数据解析起来有点复杂,我想使用LINQ。

任何提示?

1 个答案:

答案 0 :(得分:1)

        XNamespace ns = root.Name.Namespace;

        List<XElement> datalist =
               (from desc in root.Descendants(ns + "data")
                select desc).ToList<XElement>();

或为什么它不起作用;您没有访问该属性的;这也有效:

XNamespace ns = (string)root.Attribute("xmlns");

XNamespace ns = root.Attribute("xmlns").Value;