如何使用XSLT从XML文档中检索数据以在ASP.NET数据网格中使用?

时间:2009-10-27 11:40:47

标签: 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>
<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>

我需要转换,所以我可以在ASP.NET中将它读入我的数据网格,所以输出将如下所示:

Deposited by | Archive date
     machine | 21/05/2009
     machine | 21/06/2009

非常感谢

1 个答案:

答案 0 :(得分:1)

根本不需要进行任何转换。如果您想将数据拉入数据集或其他内容以便显示它,那么您只需要一点XPath。

获取所有DOCUMENT元素的XPath:

//DOCUMENT

XPath根据value元素获取一对name元素,基于DOCUMENT元素:

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值读取到数据集中或编写自己的适配器以将这些值拉出并将它们直接加载到数据网格中。 / p>