我可以知道XSL转换处理了多少XML文档吗?

时间:2009-01-23 10:03:52

标签: xml xslt

我有相当大的输入XML文件,必须使用XSL转换为给定的格式。这些XSL文件是手工制作的,我们希望确保原始文档中的每个非空文本节点都被考虑在内,即要么值,要么复制,要么读取和连接。别的什么。

这甚至可能吗?即,是否可以知道XSL转换“覆盖”了多少输入文档?

4 个答案:

答案 0 :(得分:2)

一般答案是否定

通常也不可能是实施不那么雄心勃勃的想法来查找运行时没有模板匹配的所有文本节点。之所以这样,是因为即使定义了匹配的模板,也只能选择它们作为具有“<xsl:apply-templates>”属性的select的结果进行处理,以选择特定的文本节点。

这是否在运行期间完成通常无法分析。

通常也无法分析select<xsl:value-of/>的{​​{1}}属性中使用的每个XPath表达式,因为这样的表达式可能包含一个xsl变量,我们必须知道这个变量的运行时内容,以确定将选择哪些节点。

答案 1 :(得分:1)

我现在能想到的最好的方法是在xsl的末尾添加这样的东西:

<xsl:template match="text()[normalize-space()]">
  To battle stations!
  This sneaky tag tried to escape: <xsl:value-of select="name(..)"/>
</xsl:template>

但它确实取决于<xsl:apply-templates/>在所有正确的位置被调用,并且可能不会用于非平凡的样式表......

答案 2 :(得分:0)

您可以从原始Xml中提取所有文本,然后搜索这些字符串是否在结果文档中。这并不能证明所有东西都被转换了,但你可能会发现一些明显缺失的部分。

答案 3 :(得分:0)

过去我唯一能做到这一点的方法是使用类似Altova's XMLSpy的产品逐步完成XSL。当然,这对于大型XSL和XML文档来说非常繁琐,但有时候发现有必要找出转换的内容。