如何使用XSLT从XML文档检索数据,以便在ASP.NET数据网格中使用?
我无法使用XSLT将xml转换回转换格式的xml,下面是我的xml:如何使用XSLT从XML文档检索数据,以便在ASP.NET数据网格中使用?,xslt,Xslt,我无法使用XSLT将xml转换回转换格式的xml,下面是我的xml: <?xml version="1.0" encoding="UTF-8" ?> <DOCUMENTS> <DOCUMENTS_INFO DOCUMENT_COUNT="8" /> <DOCUMENT_GROUP NAME="Invoices" DISPLAY_NAME="INVOICES"> <DOCUMENT> <FIELD> &
<?xml version="1.0" encoding="UTF-8" ?>
<DOCUMENTS>
<DOCUMENTS_INFO DOCUMENT_COUNT="8" />
<DOCUMENT_GROUP NAME="Invoices" DISPLAY_NAME="INVOICES">
<DOCUMENT>
<FIELD>
<name>USER</name>
<display_name>Deposited by</display_name>
<value>machine</value>
</FIELD>
<FIELD>
<name>DATE</name>
<display_name>Archive date</display_name>
<value>21/05/2009</value>
</FIELD>
</DOCUMENT>
<DOCUMENT>
<FIELD>
<name>USER</name>
<display_name>Deposited by</display_name>
<value>machine</value>
</FIELD>
<FIELD>
<name>DATE</name>
<display_name>Archive date</display_name>
<value>21/06/2009</value>
</FIELD>
</DOCUMENT>
</DOCUMENT_GROUP>
</DOCUMENTS>
非常感谢您根本不需要进行任何转换。如果您想将数据拉入数据集或其他内容以便显示它,那么只需要一点XPath 获取所有
文档元素的XPath:
//DOCUMENT
XPath根据名称
值获取一对值
元素,该值基于文档
元素:
FIELD[name = 'USER']/value
FIELD[name = 'DATE']/value
因此,根据解析XML所使用的技术,基本上需要对第一个表达式进行循环,然后对第一个循环的结果运行以下两个表达式。在XSL中,它将如下所示:
<xsl:template match="/">
<xsl:for-each select="//DOCUMENT">
<xsl:value-of select="FIELD[name = 'USER']/value"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="FIELD[name = 'DATE']/value"/>
</xsl:for-each>
</xsl:template>
|
就像任何事情一样,有不止一种方法可以做到这一点。您也可以使用模板:
<xsl:template match="/">
<xsl:apply-templates select="//DOCUMENT" />
</xsl:template>
<xsl:template match="DOCUMENT">
<xsl:value-of select="FIELD[name = 'USER']/value"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="FIELD[name = 'DATE']/value"/>
</xsl:template>
|
这两种方法都将给出您作为示例给出的输出,但是您最好将XPath值直接读取到数据集中,或者编写自己的适配器将这些值提取出来并直接加载到datagrid中。。。。问题到底是什么?
<xsl:template match="/">
<xsl:apply-templates select="//DOCUMENT" />
</xsl:template>
<xsl:template match="DOCUMENT">
<xsl:value-of select="FIELD[name = 'USER']/value"/>
<xsl:text>|</xsl:text>
<xsl:value-of select="FIELD[name = 'DATE']/value"/>
</xsl:template>