我需要更改以属性为中心的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>
答案 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>