在最近的一个项目中,我能够使用以下语法从我的XML文件中获取不同的值:
<xsl:for-each select="distinct-values($ds/datasource/Products-list/Products/CategoryName)">
但是现在,我们正在将项目迁移到ASP.NET,以下代码不起作用:
public DataSourceManager manager = new DataSourceManager();
protected void Page_Load(object sender, EventArgs e)
{
this.manager.Get("http:***",
"distinct-values(/datasource/Products-list/Products/CategoryName)",
new String[] { "." }, this.messageRepeater);
}
}
Get函数如下所示:
public void Get(String datasourceUrl,
String xpathToNodes,
Array nodeNames,
Repeater repeater,
params String[] options ) {
Debug.WriteLine("datasourceUrl= " + datasourceUrl);
Debug.WriteLine("xpathToNodes= " + xpathToNodes);
//call datasource url
XmlDocument doc = new XmlDocument();
doc.Load(datasourceUrl);
//statusCode
this.statusCode = doc.SelectSingleNode("/datasource/result/status/@code").Value;
if (options.GetLength(0) > 0) {
this.maxItem = Convert.ToInt16(options[0]);
}
//iterate
this.list = new ArrayList();
int count = 0;
if (IsErrorCode == false) {
XmlNodeList nodes = doc.SelectNodes(xpathToNodes);
foreach (XmlNode node in nodes) {
Hashtable row = new Hashtable();
foreach (String nodeName in nodeNames) {
row.Add(nodeName, node.SelectSingleNode(nodeName).InnerText);
}
list.Add(row);
if (++count == this.maxItem) {
break;
}
}
}
//data binding
repeater.DataSource = list;
repeater.DataBind();
}
返回的错误如下:
需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数。
如何在ASP.NET中获取不同的值?
答案 0 :(得分:2)
答案 1 :(得分:2)
我相信distinct-values
功能仅适用于xslt 2.0。如果您使用.NET内置的XSLT功能做任何事情,它只支持1.0。这可以解释你的错误。
不幸的是,在XSLT 1.0上选择不同的记录可能会有点痛苦。这个SO帖子是一个很好的方法: