¿Cómo lograr el documento invertido ordenado xmlDataSource en ListView?
-
28-10-2019 - |
Pregunta
Estoy usando un asp:XmlDataSource
Para enumerar un documento XML. Se parece a esto:
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/Xml/History.xml" />
Y lo estoy usando en un asp:Listview
como esto:
<asp:ListView runat="server" DataSourceID="XmlDataSource1" >
Me preguntaba si había una manera de revertir el orden, porque Me gustaría el ultimo fila del xml para ser el primero fila en mi lista. ¿Cómo puedo conseguir esto?
Solución
Si su XML se veía así (por ejemplo):
<myxml>
<row id="1">
<row id="2">
</myxml>
Entonces puedes hacer una transformación en línea con algo como esto:
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/Xml/History.xml">
<Transform>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<myxml>
<xsl:for-each select="//row">
<xsl:sort select="@id" order="descending" />
<xsl:copy-of select="row"/>
</xsl:for-each>
</myxml>
</xsl:template>
</xsl:stylesheet>
</Transform>
</asp:XmlDataSource>
Espero que ayude :)
Otros consejos
Podrías llenar una lista, revertirla y luego vincular a esa lista.
Editar: es difícil dar un ejemplo, porque dependerá totalmente de su archivo XML, pero la idea básica está a continuación, donde cambiaría la instrucción SELECT según sea necesario y tal vez agregue algunas de las declaraciones según sea necesario.
XDocument XDoc = XDocument.Load(XMLFileName);
ListView.DataSource = (from XMLNode in XDoc.Nodes()
select XMLNode.ToString()).ToList().Reverse();
ListView.DataBind();