我正在尝试通过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()。所以,如果有人知道为什么这不起作用......:)
答案 0 :(得分:1)
如果你看一下你的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" ) %>
这应该有效。
<强>更新强>
ASP.NET 2.0 XmlDataSource似乎还有一个问题,即无法处理默认的XML命名空间: - (
这就是你的XML中的这一行:
<VacancyList ........
xmlns="urn:EasyCruit"
请在此处参阅此博客文章主题:http://jasonf-blog.blogspot.com/2006/08/xmldatasource-xpath-workaround-for.html
你可以做两件事来解决这个问题:
更新2: 剥离XML名称空间的方法看起来效果很好--Bill Evjen提出了这种方法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中显示数据。
马克