2009-10-24 68 views
1

我在C#中的XmlNodeList我想排序ID,而无需创建阵列。 将XML数据加载到我创建的动态表中。 我还没有研究过很多XPATH,但我通过谷歌搜索找到了附加的代码可以工作。 Howevern,我想获得排序输出反馈作为XmlNodeList中,以轻松创建动态表。 这可能吗?排序与XPATH XmlNodeList中,并将其转换回的XmlNodeList

http://forums.asp.net/t/1226980.aspx):

public partial class DefaultSamePage : System.Web.UI.Page 
{ 
//a public var XmlNodeList, in order to use it both in sortNodeList and another function 
    XmlNodeList sortedNodes; 
} 

    void sortNodeList() 
{ 
     XPathDocument myQuiz = new XPathDocument(Server.MapPath("quiz.xml")); 
     XPathNavigator nav = myQuiz.CreateNavigator(); 
     XPathExpression myExp = nav.Compile("//question"); 
     myExp.AddSort("@id", XmlSortOrder.Descending, XmlCaseOrder.None, "", XmlDataType.Number); 
     XPathNodeIterator iter = nav.Select(myExp); 
     while (iter.MoveNext()) 
     { 
      // is this possible? 
      sortedNodes = iter.Current.Value; 

     } 
} 

回答

1

不过,我想获得的有序输出背为XmlNodeList,以创建动态表容易

你不能。为了有一个XmlNodeList,你需要XmlNode S,和XmlNode必须属于一个XmlDocument。而你并没有创建一个XmlDocument

XPathDocument整点的排序,它不会创建XmlNode对象。编写代码,使用IXPathNavigable的原因是,如果你有通过节点数以万计的导航找到他们六人,你的代码没有首先创建XmlNode对象数以万计。这是最主要的原因,XPathNavigator代码比使用XmlDocument代码快得多。

如果你想在你的代码中使用IXPathNagivable的任何地方,你应该到处使用它。不要编写采用XmlNodeXmlNodeList作为参数的方法;代替XPathNavigatorXPathNodeIterator的写入方法。

举例来说,如果你从XML数据填充表的,你可能有目前看起来像的方法:

public void PopulateTable(DataTable t, XPathNodeIterator iter) 
{ 
    foreach (XPathNavigator n in iter) 
    { 
     CreateRow(t, n); 
    } 
} 

private void CreateRow(DataTable t, XPathNavigator n) 
{ 
    DataRow r = t.NewRow(); 
    t["foo"] = n.GetAttribute("foo", ""); 
    t["bar"] = n.GetAttribute("bar", ""); 
    t.Rows.Add(r); 
} 

public DataTable PopulateTable(DataTable t, XmlNodeList nodes) 
{ 
    foreach (XmlNode n in nodes) 
    { 
     CreateRow(t, n); 
    } 
} 

private void CreateRow(DataTable t, XmlNode n) 
{ 
    DataRow r = t.NewRow(); 
    t["foo"] = n.GetAttribute("foo"); 
    t["bar"] = n.GetAttribute("bar"); 
    t.Rows.Add(r); 
} 

你可以很容易地通过这种方式编写代码

相关问题