我无法使用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
非常感谢
答案 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>