在LINQ中查询简单的XDocument

时间:2009-07-16 12:24:51

标签: xml linq linq-to-xml

我可能正在做一些非常愚蠢的事情,但我无法让它发挥作用:

var xmlQuery = from i in doc.Descendants("Item")
  select new TriggerItem()
  {
  CreatedDate = DateTime.Now,
  ItemIdentifier = i.Attribute("itemCode").Value,
  Name = i.Attribute("name").Value,
  ProductIdentifier = (i.Attribute("productCode") != null) ? i.Attribute("productCode").Value : null
  };

doc是一个Xdocument对象,在调试时,我可以确认它已经加载了以下xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Items xmlns="http://mywebsite">
<Item itemCode="12345" productCode="" name="testing" categoryId="">
</Item>
</Items>

所以xmlQuery.Count()shud返回1,作为一个项目,但它一直返回0!

iv也尝试过:

xmlQuery = from i in doc.Descendants("Items") 

xmlQuery = from i in doc.Descendants("Item")

即使没有创建新的TriggerItem对象,它也不会返回任何内容......任何想法? :'(

2 个答案:

答案 0 :(得分:7)

您需要指定名称空间,例如....

XNamespace ns = XNamespace.Get("yourURI");
var qry = from i in doc.Descendants(ns + "Items")....

答案 1 :(得分:1)

我知道XML,所以我可以告诉你Item元素在“http://activepromotion.net/Data/TriggerItems/1.0”命名空间中,但是你在默认命名空间中搜索它。

我不太了解LINQ to XML,不过可以告诉你如何做到这一点。