【问题标题】:Getting distinct values ; ASP.NET获得不同的价值观; ASP.NET
【发布时间】:2011-09-06 18:48:40
【问题描述】:

在最近的一个项目中,我能够使用以下语法从我的 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 中获得不同的值?

【问题讨论】:

    标签: c# asp.net xslt xpath


    【解决方案1】:

    我相信distinct-values 函数仅在 xslt 2.0 中可用。如果您使用 .NET 内置的 XSLT 功能做任何事情,它只支持 1.0。这可以解释你的错误。

    不幸的是,在 XSLT 1.0 上选择不同的记录可能有点痛苦。这篇 SO 帖子介绍了一个很好的方法:

    How to use XSLT to create distinct values

    【讨论】:

      【解决方案2】:

      编辑:安倍的回答看起来很不幸但很重要。如果您使用的是 .NET 3.5 或更高版本,我建议您改用 LINQ to XML,但如果您仍在使用非泛型集合,那就没有希望了……这可能是 Abe 答案中的链接是您最大的希望.

      【讨论】:

      • 谢谢。没有注意到错字。我用我认为可能有用的代码编辑了上面的帖子。非常感谢您的帮助。
      • @JFFF:您使用 .NET 1.1 非泛型集合的任何原因?您使用的是哪个版本的 .NET?
      • 老实说,我现在不知道。我在这里寻求帮助的原因是因为写上面代码的人今天病了,我需要完成他的工作但我有点迷茫,因为我没有参与这个项目的开发。如果您认为如果没有我的进一步解释就无法解决我的问题,我认为我无法提供它们:(
      • @JFFF:我已经编辑了我的答案——如果你甚至可以找出你正在使用的 .NET 版本,那真的很有帮助。否则我认为安倍的回答是最合适的。
      • 好的。我会从这里拿走。感谢您的帮助。
      猜你喜欢
      • 2015-04-29
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      相关资源
      最近更新 更多