XML属性排序问题
大可山人 博客专家认证 2004-04-17 09:48:05 transform.xml文件:
--------------------
<?xml version="1.0" encoding="GB2312" ?>
<sales>
<summary>
<heading>Scootney Publishing</heading>
<subhead>Regional Sales Report</subhead>
<description>Sales report for the West Coast, Central and East Coast regions.</description>
</summary>
<link>
<source>http://www.vcsharp.com</source>
<label>VC#.COM Website</label>
</link>
<ulink source="http://www.vcsharp.net" label="VC#.Net网站"/>
<data>
<region>
<name>West Coast</name>
<quarter number="1" books_sold="24000" />
<quarter number="2" books_sold="38600" />
<quarter number="3" books_sold="44030" />
<quarter number="4" books_sold="21000" />
</region>
<region>
<name>Central</name>
<quarter number="1" books_sold="11000" />
<quarter number="2" books_sold="16080" />
<quarter number="3" books_sold="25000" />
<quarter number="4" books_sold="29000" />
</region>
<region>
<name>East Coast</name>
<quarter number="1" books_sold="27000" />
<quarter number="2" books_sold="31400" />
<quarter number="3" books_sold="40100" />
<quarter number="4" books_sold="30000" />
</region>
</data>
</sales>
sort.aspx
-----------------------
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
<%@ import namespace="System.Xml"%>
<%@ import namespace="System.Xml.XPath"%>
<Script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
StringBuilder unsorted = new StringBuilder();
StringBuilder sorted = new StringBuilder();
string xpath = "/sales/data/region/quarter/@books_sold";//用这句无法得到正常结果。为什么?
//上句如果是:string xpath = "/sales/data/region/name";可以得到正常结果
XPathDocument doc = new XPathDocument(Server.MapPath("transform.xml"));
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator nodeIter1 = nav.Select(xpath);
while (nodeIter1.MoveNext()) {
unsorted.Append(nodeIter1.Current.Value + "<br />");
}
lblUnsorted.Text = unsorted.ToString();
XPathExpression exp = nav.Compile(xpath);
exp.AddSort("text()",XmlSortOrder.Descending,
XmlCaseOrder.None,"",XmlDataType.Number);
XPathNodeIterator nodeIter2 = nav.Select(exp);
while (nodeIter2.MoveNext()) {
sorted.Append(nodeIter2.Current.Value + "<br />");
}
lblSorted.Text = sorted.ToString();
}
</Script>
排序前:<br /><asp:Label runat="server" id="lblUnsorted"/><br/>
排序后:<br />
<font color="red">
<asp:Label runat="server" id="lblSorted"/>
</font>