Xml 在另一个XSLT转换中使用一个XSLT转换的结果
我是XSLT(2.0)新手,遇到了以下情况。我有如下的XML输入:Xml 在另一个XSLT转换中使用一个XSLT转换的结果,xml,xslt,Xml,Xslt,我是XSLT(2.0)新手,遇到了以下情况。我有如下的XML输入: 价值 价值2 价值 价值2 价值 价值2 我需要两样东西: 将包含的所有元素的属性名称从elemNameX更改为newelemNameX 更改所有的类型属性以引用这些新名称 我已经设法做到了第一步,但第二步我很难做到 我在考虑把所有的\\something\@type通读一遍,并试图找到\\elem[@name='newelemX']。但我无法匹配第一步中创建的修改后的 是否可以在不同模板中匹配一个模板的结果? 我在想把所有
价值
价值2
价值
价值2
价值
价值2
我需要两样东西:
的所有
元素的属性名称从elemNameX
更改为newelemNameX
的类型
属性以引用这些新名称\\something\@type
通读一遍,并试图找到\\elem[@name='newelemX']
。但我无法匹配第一步中创建的修改后的
是否可以在不同模板中匹配一个模板的结果?
我在想把所有的东西都找出来
\elem[@name='newelemX']。但我无法匹配在中创建的修改
第一步
是否可以在不同的模板中匹配一个模板的结果
如果您已将评估模板的结果指定给变量,则可以(在XSLT 2.0中)。例如,可以将模板应用于变量中记录的节点序列。但是,如果你愿意允许逻辑上的一些重复,你就不需要再遇到这种麻烦了。即使在XSLT 1.0中也可以这样做:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Identity transform for where there is no more specific match -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- modified "name" attributes for certain "elem" elements -->
<xsl:template match="elem[subel1]/@name">
<xsl:attribute name="name">new<xsl:value-of select="."/></xsl:attribute>
</xsl:template>
<!-- "type" attributes of "something" elements -->
<xsl:template match="something/@type">
<!-- need to capture the current value for use in a test expression -->
<xsl:variable name="current_value" select="." />
<xsl:attribute name="type">
<!-- insert "new" into the value where needed (logic duplicated here) -->
<xsl:if test="/descendant::elem[@name=$current_value]/subel1">new</xsl:if>
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
新的
新的
除了示例中所示的属性之外,您还需要关注其他属性吗?具体来说,您是否需要提供复制未描述的
或
元素的任何属性的功能?您的示例XML格式不正确,因为
元素未关闭。我假设您打算将其中一些开始标记改为结束标记。是的,
还有其他属性需要保留。(在实践中比我的示例稍微复杂一些。事实上,我正在创建名为newelemNameX
的新元素
,我从newelemNameX
中引用elemNameX
,但由于我解决了这一部分,我简化了问题)。你说得对
,我会解决它的,谢谢!我没有意识到我可以在任何更改之前编写
以匹配原始文档,这就成功了。