Получать разные значения;ASP.NET - PullRequest
1 голос
/ 06 сентября 2011

В недавнем проекте я смог использовать следующий синтаксис для получения различных значений из моего 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?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Я считаю, что функция distinct-values доступна только в xslt 2.0. Если вы что-то делаете со встроенной функциональностью .NET XSLT, она поддерживает только 1.0. Это может объяснить вашу ошибку.

К сожалению, выбор отдельных записей в XSLT 1.0 может быть немного трудным. Этот SO пост описывает хороший метод для этого:

Как использовать XSLT для создания отдельных значений

2 голосов
/ 06 сентября 2011

РЕДАКТИРОВАТЬ: ответ Абэ выглядит несчастным, но важным. Если бы вы использовали .NET 3.5 или выше, я бы предложил вместо этого использовать LINQ to XML, но если вы все еще используете неуниверсальные коллекции, это не обещает ... может быть, ссылка в ответе Абэ - ваша лучшая надежда .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...