Как разобрать XML-ленту с помощью asp: XmlDataSource и XPath - PullRequest
0 голосов
/ 04 августа 2009

Я пытаюсь перечислить вакансии в asp: GridView, используя XML_feed через asp: XmlDataSource. Это должно быть довольно простым, но я что-то упускаю из-за своих выражений XPath ..

Это краткий пример того, чего я пытаюсь достичь (укажите название вакансии):

<asp:XmlDataSource ID="XMLsource" DataFile="http://demo.easycruit.com/export/xml/vacancy/list.xml" XPath="VacancyList/Vacancy" runat="server"/>
<asp:GridView DataSourceID="XMLsource" AutoGenerateColumns="False" runat="server">      
<Columns>
        <asp:TemplateField>
            <HeaderTemplate>Title</HeaderTemplate>
            <ItemTemplate><%# XPath( "Version/Title" ) %></ItemTemplate>                
    </asp:TemplateField>            
</Columns>
</asp:GridView>

Оба контроллера имеют DataBind () в коде позади. Так что, если кто-то знает, почему это не работает ...:)

1 Ответ

1 голос
/ 04 августа 2009

Если вы посмотрите на свой XML (только первые несколько строк):

<VacancyList generated="2009-08-04T18:43:17" 
             xmlns="urn:EasyCruit" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://www.easycruit.com/dtd/vacancy-list.xsd">
  <Vacancy id="82034" date_start="2007-04-17" date_end="2009-12-22" 
           reference_number="CDP-GR3">
    <Versions>
      <Version language="fr">
        <Title>Chef de produit (H/F)</Title>
        <TitleHeading/>

Вы связываете свою сетку данных со списком <Vacancy> элементов - пока отлично.

Но тогда в вашей сетке вы ссылаетесь: <%# XPath( "Version/Title" ) %>

Это не сработает, поскольку <Vacancy> не имеет коллекции '/ inside it - these elements are within a `.....

Так что вам нужно ссылаться на ваш ItemTemplate:

<%# XPath( "Versions/Version[@language='fr']/Title" ) %>

Это должно сработать.

UPDATE:
Похоже, что дополнительная проблема с тем, что ASP.NET 2.0 XmlDataSource не может обрабатывать пространства имен XML по умолчанию: - (

Вот эта строка в вашем XML:

<VacancyList ........
             xmlns="urn:EasyCruit" 

См. Этот пост в блоге здесь на тему: http://jasonf -blog.blogspot.com / 2006/08 / xmldatasource-xpath-workaround-for.html

Есть две вещи, которые вы можете сделать, чтобы это исправить:

  • использовать XSLT-преобразование для удаления пространства имен по умолчанию, чтобы XmlDataSource мог обрабатывать данные
  • загрузить данные из URL в коде и связать их с GridView в вашем коде позади

ОБНОВЛЕНИЕ 2: Метод удаления пространств имен XML, кажется, работает очень хорошо - Билл Эвджен предлагает этот метод здесь .

Если вы сохраните его XSLT-файл в сообщении в файл с именем "StripNamespaces.xslt" в проекте веб-сайта, вы должны получить свои данные, если вы измените asp: XmlDataSource на:

<asp:XmlDataSource ID="XMLsource" runat="server"
            DataFile="http://demo.easycruit.com/export/xml/vacancy/list.xml" 
            TransformFile="~/StripNamespaces.xslt"
            XPath="VacancyList/Vacancy" />

Обратите внимание на новый параметр «TransformFile» - он должен ссылаться на этот XSLT-файл. После этого я получаю данные, отображаемые в GridView.

Марк

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