我今天尝试使用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。
任何提示?
答案 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;