更改要导入Access数据库的Xml的结构

时间:2014-06-06 14:37:31

标签: c# css xml database xslt

我需要更改以属性为中心的XML文件,以便它适合将Access数据库导入到已定义的列中。

我一直在阅读有关XSLT的更改代码,但没有运气,输出仍然没有以我想要的方式给我这些表。

这是XML代码:

<Database>
<ChildRecords>
     <ChildRecord>
         <TableName>Client</TableName>
                  <Columns>
                     <Column Name="id" Data="1234"/>
                     <Column Name="forename" Data="John"/>
                     <Column Name="surname" Data="Smith"/>
                  </Columns>
       </Childrecord>
       <ChildRecord>
         <TableName>Product</TableName>
                  <Columns>
                     <Column Name="id" Data="4321"/>
                     <Column Name="description" Data="Bed"/>
                     <Column Name="price" Data="100"/>
                  </Columns>
       </Childrecord>
</ChildRecords>
</Database>

编辑*必需的输出代码:

<Database>
    <Client>
       <id>1234</id>
       <forename>John</forename>
       <surname>Smith</surname>
    </Client>
    <Product>
       <id>1234</id>
       <description>Bed</description>
       <price>100</price>
    </Product>
</Database>

1 个答案:

答案 0 :(得分:1)

尝试以下样式表。它从您的输入示例中生成所需的输出(一旦校正为良好形成!)。我不确定输出格式对于具有多个记录的表是否正确。

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <Database>
         <xsl:for-each select="Database/ChildRecords/ChildRecord">
            <xsl:element name="{TableName}">
                <xsl:for-each select="Columns/Column">
                    <xsl:element name="{@Name}">
                        <xsl:value-of select="@Data" />
                    </xsl:element>
                </xsl:for-each>
            </xsl:element>
         </xsl:for-each>
    </Database>
</xsl:template>

</xsl:stylesheet>