如何通过maximumn属性读取XmlDocument到最小属性?

时间:2014-04-10 11:12:32

标签: c# .net xml linq system.xml

我在dotnet / c#中读取XmlDocument,通过使用System.Xml,我喜欢通过More属性读取xmlElement到less属性,如何读取?我们可以这样做吗?

我的示例xml文件和编码:

<conditions><condition if:size="10pt" if:name="courier"/>
<condition if:size="10pt"/>
<condition if:size="10pt" if:name="times" ifnot:emphasis="bold"/></conditions>

            foreach (XmlElement CondNode in XmlDoc.SelectNodes("//condition"))
{
//how to read and sort(not by length) by no. of attribute

}

我希望阅读以下订单:

<condition if:size="10pt" if:name="times" ifnot:emphasis="bold"/>
<condition if:size="10pt" if:name="courier"/>
<condition if:size="10pt"/>

提前致谢,

萨兰

2 个答案:

答案 0 :(得分:0)

使用Linq to XML

XDocument doc = XDocument.Parse(xml);
var sorted = doc.Descendants("condition").OrderByDescending(node => node.Attributes().Count());
foreach (XElement condition in sorted)
{
    // Do whatever you need
}

答案 1 :(得分:0)

如果要继续使用XmlDocument,可以按如下方式对节点进行排序:

var nodes = doc.SelectNodes("//condition")
               .OfType<XmlElement>()
               .OrderByDescending(x => x.Attributes.Count);
foreach (XmlElement CondNode in nodes)
{
     //how to read and sort(not by length) by no. of attribute
}

通过使用OfType<T>,您可以从集合中检索所有XmlElements(这应包含集合中的所有节点)并作为结果接收IEnumerable<XmlElement>。您可以将此作为Linq查询的起点。 XmlNodeList仅实现IEnumerable的非泛型版本,因此您无法对其运行Linq查询,因为大多数方法都是IEnumerable<T>的扩展方法。