使用 XSLT 2.0 的两阶段转换
我正在尝试将 CSV 文件作为输入并将其转换为 XML。我是 XSLT 新手,我找到了一种将 CSV 转换为 XML 的方法(使用 Andrew Welch) 就像这样:
输入 CSV 文件:
car manufacturer,model,color,price,inventory
subaru,outback,blue,23195,54
subaru,forester,silver,20495,23
我的输出 XML 是:
<?xml version="1.0" encoding="UTF-8"?>
<rows>
<row>
<column name="car manufacturer">subaru</column>
<column name="model">outback</column>
<column name="color">blue</column>
<column name="price">23195</column>
<column name="inventory">54</column>
</row>
<row>
<column name="car manufacturer">subaru</column>
<column name="model">forester</column>
<column name="color">silver</column>
<column name="price">20495</column>
<column name="inventory">23</column>
</row>
</rows>
我想要的输出实际上类似于:
<stock>
<model>
<car>subaru outback</car>
<color>blue</color>
<price>23195</price>
<inventory>54</inventory>
</model>
<model>
<car>subaru forester</car>
<color>silver</color>
<price>20495</price>
<inventory>23</inventory>
</model>
</stock>
我读到的是,最好使用两个相变。 CSV 到 XML 是使用 XSLT 2.0 完成的,因此我认为也可以使用它来完成两阶段转换,而不使用节点集函数。
因此,第一阶段是将原始 CSV 文件作为输入,然后输出如上所示的中间 XML。然后获取该中间 XML,并将其传递到另一个转换以获得所需的输出。
任何人都可以帮助如何完成两相转变?我在将第一阶段的输出作为第二阶段的输入传递时遇到问题?
到目前为止我有这样的事情:
<xsl:import href="csv2xml.xsl"/>
<xsl:output method="xml" indent="yes" />
<xsl:variable name="intermediate">
<xsl:apply-templates select="/" mode="csv2xml"/>
</xsl:variable>
<xsl:template match="rows" name="main">
**[This is what I'm having trouble with]**
</xsl:template>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我不明白为什么这种转换需要两个阶段 - 除了可能允许您在其中一个阶段重用现有代码之外。
但是,当您确实需要两个阶段时,一般模型是:
阶段 1 和阶段 2 的模板规则(及其 apply-templates 调用)分别处于阶段 1 或阶段 2 模式。
I don't see any reason why this transformation needs two phases - except perhaps to allow you to reuse existing code for one of the phases.
However, when you do need two phases, the general model is:
with the template rules for phase 1 and phase 2 (and their apply-templates calls) all being in mode phase-1 or phase-2 respectively.
此 XSLT 2.0 样式表:
输出:
注意:在 XSLT 3.0 中,您将能够将模板应用于一般项目。
编辑:正确的名称。
This XSLT 2.0 stylesheet:
Output:
Note: In XSLT 3.0 you will be able to apply templates to items in general.
EDIT: Correct names.
您可以在此处找到如何使用 XSLT 3.0 执行此操作的示例:
http:// www.stylusstudio.com/tutorials/intro-xslt-3.html
并参见“文本操作”。
You can find here an example of how to do this with XSLT 3.0 :
http://www.stylusstudio.com/tutorials/intro-xslt-3.html
And see under "Text Manipulations".