【发布时间】:2020-05-18 02:45:47
【问题描述】:
我正在尝试做的事情:有一个自动化系统可以生成 10k XML 文件。我想将所有这些文件读入 MS Access 数据库。为了导入文件(使用 VBA ImportXML 函数),我需要使用 XSL 样式表使用 VBA FormatXML 函数转换文件。
我用谷歌搜索了一些东西,但似乎我无法让它工作。这是 XML 文件的样子(基于保密原因,我无法显示真实文件,但结构看起来是这样的):
<?xml version="1.0" encoding="UTF-16"?>
<Album xmlns="x-schema:ConfigFileSchema.xml">
<Informations>
<General>
<Name>Name of Album</Name>
<Band>Name of Band</Band>
</General>
<Parameters>
<Parameter>
<ParamName>Length of Album</ParamName>
<ParamValue>57:16</ParamValue>
</Parameter>
<Parameter>
<ParamName>Year</ParamName>
<ParamValue>2020</ParamValue>
</Parameter>
</Parameters>
<Tracks>
<Track>
<Trackdef>
<TrackName>Name of Track</TrackName>
<TrackLength>3:30</TrackLength>
</Trackdef>
<Parameters>
<Parameter>
<ParamName>Features</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
</Parameters>
</Track>
<Track>
<Trackdef>
<TrackName>Name of Track</TrackName>
<TrackLength>3:30</TrackLength>
</Trackdef>
<Parameters>
<Parameter>
<ParamName>Features</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
</Parameters>
</Track>
</Tracks>
</Informations>
</Album>
我尝试进行一些非常简单的转换,以使 TransformXML 的输出 XML 看起来像这样:
<?xml version="1.0"?>
<Information>
<Track>
<Parameter>
<ParamName>Features</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
</Track>
<Track>
<Parameter>
<ParamName>Features</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
<Parameter>
<ParamName>Some other Parameters</ParamName>
<ParamValue>...</ParamValue>
</Parameter>
</Track>
</Information>
使用这个 XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Album/Informations/Tracks/Track/Parameters">
<Information>
<xsl:for-each select="child::Parameter">
<Parameter>
<xsl:copy-of select="child::ParamName"/>
<xsl:copy-of select="child::ParamValue"/>
</Parameter>
</xsl:for-each>
</Information>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
遗憾的是它什么也没做,产生了一个空白文件。 我希望有人能指出我在这里做错了什么。
【问题讨论】:
-
作为副本关闭。无意批评;你不可能知道有数百人以不同的方式问过同样的问题。但答案总是一样的:搜索“XSLT 默认命名空间”