Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能知道XSL转换处理了多少XML文档吗?_Xml_Xslt - Fatal编程技术网

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

我能知道XSL转换处理了多少XML文档吗?,xml,xslt,Xml,Xslt,我有相当大的输入XML文件,必须使用XSL将其转换为给定格式。这些XSL文件是手工制作的,我们希望确保原始文档中的每个非空文本节点都被考虑在内,即,要么是“ed”值,要么是“ed”副本,要么是读取并与其他内容连接 这可能吗?也就是说,是否可能知道XSL转换“覆盖”了输入文档的多少?您可以从原始Xml中提取所有文本,然后搜索这些字符串是否在结果文档中。这并不能证明所有内容都已转换,但您可能会发现一些明显缺失的部分。我现在能想到的最好办法是在xsl末尾添加如下内容: <xsl:template

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


这可能吗?也就是说,是否可能知道XSL转换“覆盖”了输入文档的多少?

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

我现在能想到的最好办法是在xsl末尾添加如下内容:

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

去战斗站!
这个鬼鬼祟祟的标签试图逃跑:

但这实际上取决于在所有正确的位置调用
,对于非平凡的样式表可能不会这样做…

我过去做这件事的唯一方法是使用类似的产品逐步执行XSL。当然,这对于大型XSL和XML文档来说是非常乏味的,但有时我们发现有必要了解转换的情况。

一般的答案是否定的

通常也不可能实现不太雄心勃勃的想法,即在运行时查找没有模板匹配的所有文本节点。这是因为,即使定义了匹配的模板,也只能选择它们进行处理,因为它们具有一个选择特定文本节点的“
select
”属性

这是否在运行时完成通常无法分析


通常也不可能分析
select
属性中使用的每个XPath表达式,因为这样的表达式可能包含xsl变量,我们必须知道该变量的运行时内容,才能确定将选择哪些节点。

是的,但我的问题是某些文本可能会被转换,例如,日期字段可能会从一个语言环境转换为另一个语言环境。不幸的是,所描述的技术仅适用于捕获不匹配的文本节点。文本节点可能不被任何模板匹配,但它仍然可以被其他模板的代码访问/复制。另一方面,即使文本节点与模板匹配,也可能无法复制!