2009-11-20 54 views
2

我需要:我想深入复制单个选定节点的所有子节点,而不实际复制它。示例:从XSLT:深层子版本

<father><son i="1" /><son i="2" /><son i="0"><lastNode /></son></father> 

我希望提取

<son i="1" /><son i="2" /><son i="0"><lastNode /></son> 

我知道,我可以换一个每一个周期,然后做这XSL:复制的。我想知道是否有一个更简单的表达式来实现相同的结果。一些想法?

后续行动。我的问题错过了几点。我应该说所有孩子都是“所有可能的孩子”,包括文本节点;另一个证明更好的问题已经包含答案。其次,我从你身上学到了什么 - 社区 - 是我足够愚蠢,试图用XSL来解决事实上更多的是XPATH问题。感谢大家对此的了解

干杯。

+0

如果是文档元素,此深拷贝不会产生良好的XML文档。 – Erlock 2009-11-20 14:16:19

回答

3

尝试选择所有的孩子..

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <xsl:copy-of select="father/*"/> 
</xsl:template> 
</xsl:stylesheet> 

E.G. 鉴于输入

<father><son i="1" /><son i="2" /><niceSon /><son i="0"><lastNode /></son></father> 

它输出

<son i="1" /><son i="2" /><niceSon /><son i="0"><lastNode /></son> 
0

使用例如<xsl:copy-of select="father/son"/>

+0

我的错:我的例子有误导性。您的解决方案只适用于儿童是。如果您有这不再有效 – Daniel 2009-11-20 09:12:29

3
<xsl:copy-of select="father/node()" /> 
+1

这将匹配除属性节点以外的所有节点。 – mikesub 2009-11-20 10:10:41

+1

您的评论有用。首先,我忽略了你提出的解决方案与Codemeit提出的解决方案之间的区别;但事实上,当您需要复制文本节点时,您的解决方案是正确的。例如:如果我需要转换为html,如: Bla bla bla 我说bla! etc.等然后做我真正的意思,而oter解决方案只保留我说bla!。好消息是我们有一些东西需要学习...... – Daniel 2009-11-20 16:33:03