【发布时间】:2014-12-30 19:14:03
【问题描述】:
出于政治原因,客户希望我实现一种方法来计算以通用方式在 xml 文档上完成的 xslt 转换的数量,而不是另一种方式。我意识到一旦根据一些论坛初始化变量就无法更改,但如果我理解正确,可以使用模板来解决。虽然,我很难理解它。
将有 3 种不同类型的计数器:添加、修改和删除。我想将计数输出到某种文件。我猜想这样做的一种方法是在第一个 xslt 的基础上使用第二个 xslt。但我有时间了解如何使用 xslt 进行计数。
原来的变换看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"[
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- copy identity -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- <xsl:template match="is_gone|@value"/> -->
<xsl:template match="is_gone"/>
<!-- Adding an element -->
<xsl:template match="viral_desc">
<xsl:copy-of select="."/>
<blarg_group>17</blarg_group>
</xsl:template>
<!-- modification -->
<xsl:template match ="some_test_value/text()[.< 500]">500 </xsl:template>
<xsl:template match ="some_test_value/text()[.> 2000]">2000 </xsl:template>
</xsl:stylesheet>
要转换的 XML 数据示例
<class guid="a58bca48-cb0a-5f37-3a11-916e3a74959">
<cork_id value="871222" valid="false"/>
<merk_id value="11111" valid="false"/>
<todd_id value="2188" valid="true"/>
<name> Garp Toblabber </name>
<classification>Sarcastic</classification>
<is_gone>true</is_gone>
<move>true
<thingA>true</thingA>
<thingB>true
<subThingB>true </subThingB>
</thingB>
</move>
<class_show_text> DA </class_show_text>
<some_test_value> 3000 </some_test_value>
<some_test_value> 3 </some_test_value>
<some_test_value> 520 </some_test_value>
<ew_tv_text> Drag </ew_tv_text>
<standard_room_type> liquid </standard_room_type>
<viral_desc> Dull </viral_desc>
<out_id euro_std="A" id="55" name="Nerf" environment="Volatile" category="Vague" modifier="Yes" is_out="false"/>
<source/>
<comments/>
</class>
所需的输出如下所示
<r>
<add> 1 </add>
<del> 1 </del>
<mod> 2 </mod>
</r>
【问题讨论】:
-
你的例子有多大的代表性?根据您向我们展示的内容,所有受影响的节点都是根元素的直接子节点,计算它们是微不足道的。 --- 附:您将使用哪个处理器?
-
@michael.hor257k 该示例是较大 xml 的子集。 xslt 转换的添加、删除和修改也是一个小子集。所以每种类型都会有很多。我将使用 .NET 处理器。
-
它是针对每个处理的文件还是一个通用的偶尔报告?如果您正在寻找模板报告工具,则有许多内置编辑器,例如 oXygen。
-
转换用于处理 xml 文件,这些文件基本上是针对不同客户集的配置文件。这是经常使用的东西。