2009-08-04 9 views
0

Ich versuche, Leerstellen in einer ASP: GridView mit einem XML_feed über eine Asp: XmlDataSource aufzulisten. Diese sollte sein irgendwie einfach, aber ich bin fehle etwas mit meiner XPath-Ausdrücke ..Wie analysiert man XML-Feed mit asp: XmlDataSource und XPath

Dies ist ein kurzes Beispiel dafür, was ich versuche (Listentitel der offenen Stellen) zu erreichen:

<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> 

Beide Controller haben DataBind() im Codebehind. Also, wenn jemand weiß, warum diese Arbeit doen 'T ... :)

Antwort

1

Wenn Sie einen Blick auf Ihre XML haben (nur die ersten paar Zeilen):

<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/> 

Sie binden Ihre Datenraster auf der Liste von Elemente - gut so weit.

Aber dann in Ihrem Raster verweisen Sie: <%# XPath("Version/Title") %>

Das wird nicht funktionieren, da die nicht hat ‚/ inside it - these elements are within a` Sammlung .....

Also, was Sie brauchen, um Referenz in Ihrem ItemTemplate wäre:

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

Das sollte funktionieren.

UPDATE:
scheint es mit der ASP.NET 2.0 XmlDataSource ein zusätzliches Problem zu sein, nicht Standard-XML-Namespaces zu handhaben zu können :-(

Das ist diese Linie hier in Ihrem XML:

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

sehen Sie diesen Blog-Beitrag hier zum Thema: http://jasonf-blog.blogspot.com/2006/08/xmldatasource-xpath-workaround-for.html

Es gibt wirklich zwei Dinge, die Sie tun könnten, dies zu beheben:

  • Verwendung einer XSLT-Transformation den Standardnamespace abzustreifen, so dass die XmlDataSource die Daten verarbeiten kann
  • laden die Daten aus der URL in Code, und binden Sie es in Ihrem Code-Behind Gridview

UPDATE 2: Die Methode zum Entfernen der XML-Namespaces scheint recht gut zu funktionieren - Bill Evjen schlägt diese Methode here vor.

Wenn Sie seine XSLT-Datei in der Post in eine Datei namens „StripNamespaces.xslt“ in der Website-Projekt zu speichern, sollten Sie Ihre Daten, wenn Sie die asp ändern: XmlDataSource sein:

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

Beachten Sie die neue Einstellung "TransformFile", die auf diese XSLT-Datei verweisen muss. Wenn dies vorhanden ist, werden jetzt Daten in der GridView angezeigt.

Marc