用xmlns选择XElements

时间:2011-05-11 15:05:12

标签: xml linq-to-xml xml-namespaces xelement

如何选择指定xmlns的元素?我需要选择Include / Fragment元素。我尝试在元素名称之前添加http://schemas.microsoft.com/wix/2006/wi,但这不起作用。在XmlDocument中有NamespaceManager功能,但我在XDocument中看不到相同的东西。那么如何选择带有xmlns的元素?

<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment/>
</Include>

我试过了:

IEnumerable<XElement> Fragments = d.Element("Include").Elements("Fragment");

const string xmlns="http://schemas.microsoft.com/wix/2006/wi/";
IEnumerable<XElement> Fragments = d.Element(xmlns+"Include").Elements(xmlns+"Fragment");

2 个答案:

答案 0 :(得分:2)

您只需要将xmlns变量设为XNamespace(而不仅仅是字符串):

XNamespace xmlns = "http://schemas.microsoft.com/wix/2006/wi";

IEnumerable<XElement> Fragments = doc.Element(xmlns + "Include").Elements(xmlns + "Fragment");

然后它应该工作得很好!

答案 1 :(得分:0)

XElement yourfile = XElement.Load("yourfile.xml");
IEnumerable<XElement> address =
    from el in yourfile.Elements("Include")
    where (string)el.Attribute("XElement") !=null
    select el;

我尝试在此处实施代码:http://msdn.microsoft.com/en-us/library/bb675197.aspx 它还将其转换为列表。希望有所帮助