如何使用asp:XmlDataSource和XPath解析XML提要

a2mppw5e  于 2022-12-15  发布在  .NET
关注(0)|答案(1)|浏览(107)

我试图通过asp:XmlDataSource使用XML_feed在asp:GridView中列出空缺。这 * 应该 * 有点简单,但是我的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()代码隐藏。所以,如果有人知道为什么这个不工作...:)

owfi6suc

owfi6suc1#

如果您看一下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/>

将datagrid绑定到<Vacancy>元素列表-到目前为止一切正常。
但在网格中,您引用:<%# XPath( "Version/Title" ) %>
这是行不通的,因为<Vacancy>没有'/inside it - these elements are within a'集合.....
因此,您需要在ItemTemplate中引用的内容是:

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

应该可以

更新日期:

ASP.NET2.0XmlDataSource似乎还有一个问题,即不能处理默认的XML命名空间:-(
这就是XML中的这一行:

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

请在此查看此博客文章的主题:http://jasonf-blog.blogspot.com/2006/08/xmldatasource-xpath-workaround-for.html
你可以做两件事来解决这个问题:

  • 使用XSLT转换去除默认命名空间,以便XmlDataSource可以处理数据
  • 在代码中从URL加载数据,并在代码隐藏中将其绑定到GridView
    **更新2:**剥离XML名称空间的方法似乎工作得很好- Bill埃夫扬提出了这种方法here

如果您将帖子中的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中显示数据了。
马克

相关问题