如何判断XSLT中我的XML文件中的哪些属性/元素?

时间:2012-12-06 10:08:47

标签: xml xslt

我有一个由XSLT处理的XML文件,用于生成另一个XML文件。

是否有一种简单的方法可以了解XSLT为了生成输出文件而引用的原始XML消息中的所有可能元素/属性?

如果我查看w3school.com网站(http://www.w3schools.com/xsl/xsl_transformation.asp)上的示例,那么目录XML包含价格和年份等项目,但XSLT只会提取目录/ cd / title和catalog / cd / artist

所以我需要的是某种自动魔术工具,它可以分析xslt(可能是输入文件模式),给我一些输出文件将包含的属性列表。

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

如果您将xslt文件更改为此

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

如果有任何帮助,它会显示原始文件的副本吗?

答案 1 :(得分:0)

但是很好的想象力!好。目前没有这样的工具可以分析XSLT并让你知道它在XML文件中引用的所有元素/属性'!你必须手动完成..

答案 2 :(得分:0)

自己制作这样的工具并不困难:

添加到与元素或属性匹配的任何模板

<xsl:message>
 <!-- Put all the data here that identifies the element attribute,
      for example the Xpath expression that selects the current node
 -->
</xsl:message>

您可以使用现有的转换来获取节点并生成一个选择节点的XPath表达式 - 在上面的xsl:message中调用它们。例如,见:Generate/get xpath from XML node java

然后,您需要做的是将所有这些生成的XPath表达式与|运算符组合在一起,并评估生成的XPath表达式 - 这将选择转换中实际引用的所有元素和属性。 / p>

如果您还要考虑由XSLT内置模板处理的元素/属性,只需覆盖转换中具有特定模板的元素/属性 - 这是一个很好的做法,额外的好处可能会在您的转型中发现错误。