Xml XSL匹配一些但不是全部
我从中得到了一个解决方案,该方案由Xml XSL匹配一些但不是全部,xml,xslt,Xml,Xslt,我从中得到了一个解决方案,该方案由 我现在需要在我的源XML中使用额外的字段,并且需要现有的标签完好无损,但是我在这方面遇到了问题 <instance> <NewTag>Hello</newTag1> <AnotherNewTag>Everyone</AnotherNewTag> <InfBy1>Dr Phibes</InfBy1> <InfBy2>Dr X</InfBy2&
我现在需要在我的源XML中使用额外的字段,并且需要现有的标签完好无损,但是我在这方面遇到了问题
<instance>
<NewTag>Hello</newTag1>
<AnotherNewTag>Everyone</AnotherNewTag>
<InfBy1>Dr Phibes</InfBy1>
<InfBy2>Dr X</InfBy2>
<InfBy3>Dr Chivago</InfBy3>
</instance>
你好
每个人
菲布斯博士
X博士
奇瓦戈博士
它会删除附加标签和输出
<result xmlns:my="my:my">
HelloEveryone
<items>
<item>
<label>Dr Phibes</label>
<value>60</value>
</item>
</items>
...
大家好
菲布斯博士
60
...
我一直在用它做很多实验
<xsl:otherwise>
<xsl:copy-of select=".">
</xsl:copy-of>
</xsl:otherwise>
但是作为一个xsl新手,我似乎无法让它工作。我觉得我找错人了
有人有什么想法吗
谢谢
将您的
NewTag
和其他NewTag
元素与匹配。如果需要另一种转换,则需要声明此类规则
需要现有标签完好无损吗
那你是在找
这是
的一个副作用,它尝试为遇到的每个子节点找到匹配的模板,并结合隐含的XSLT“默认行为”
在您的情况下,它会遇到
和
,但这些节点没有模板
捕获这种情况的默认行为(隐藏的默认模板)将元素的文本值复制到输出流
的文本值是“Hello”,而
的文本值是“Everyone”,因此您可以看到“HelloEveryone”
如果不希望这样,请编写自己的模板来捕获这些节点:
<xsl:template match="NewTag|AnotherNewTag">
<xsl:copy-of select="." />
</xsl:template>
或者,编写一个捕获任何未处理元素节点的节点:
<!-- empty templates do nothing (matched nodes do not appear in the output) -->
<xsl:template match="*" />
如果您希望复制未处理的节点,但仍希望在其中递归应用模板,则标识模板(@Alejandro的答案显示了这一点)是一个不错的选择。XPath表达式匹配如何=“/*/*/*”?@Alejandro:谢谢Alejandro-非常有用!谢谢你的解释。我确实需要循环访问一些记录,因此使用了@Alejandro的解决方案。
<xsl:template match="NewTag|AnotherNewTag">
<xsl:copy-of select="." />
</xsl:template>
<!-- empty templates do nothing (matched nodes do not appear in the output) -->
<xsl:template match="*" />