Xml 如何从节点获取所有子元素

Xml 如何从节点获取所有子元素,xml,xslt,Xml,Xslt,我想从XML中提取包含所有值及其元素的子元素 子节点:节点:-不返回结果 子元素::*-这将获取第一个元素的值 示例XML <testdata> <Name> <Name1>Rahul</Name1> <Name2>Rahul</Name2> <Name3>Rahul</Name3> <Name4>Rahul</Name4> <Name5>Ra

我想从XML中提取包含所有值及其元素的子元素

子节点:节点:-不返回结果 子元素::*-这将获取第一个元素的值

示例XML

<testdata>
 <Name>
  <Name1>Rahul</Name1>
  <Name2>Rahul</Name2>
  <Name3>Rahul</Name3>
  <Name4>Rahul</Name4>
  <Name5>Rahul</Name5>
  <Name6>Rahul</Name6>
  <Name>
<testdata>
XSLT

预期结果

<Name1>Rahul</Name1>
<Name2>Rahul</Name2>
<Name3>Rahul</Name3>
<Name4>Rahul</Name4>
<Name5>Rahul</Name5>
首先,使用xsl:value of,它只返回节点的文本值。您应该使用xsl:copy of here来复制节点本身

另外,在XSLT1.0中,如果在多个节点上使用xsl:value of,它将只返回第一个节点的值,这就是为什么child:*在xsl:value of中使用时只返回第一个节点的值。请注意,child::node不返回任何内容,因为node还选择文本节点,因此它将拾取名称1之前的空白节点。如果在节点中添加了xsl:strip空间,那么就会得到结果

所以,你应该这样做

<xsl:copy-of select="Name/*" />
或者,排除具有给定名称的节点

<xsl:copy-of select="Name/*[not(self::Name6)]" />

我尝试了在google上获得的大部分Xpath,但没有使用xsl:copy of而不是xsl:value of。在XSLT1.0中,xsl:value of只返回所选节点集中第一个节点的值。而且它不会复制标记。当我在编辑器中尝试时,我得到了预期的结果,但每个元素中都有一行空间。我不确定每个元素中的一行空间是什么意思,我担心。谢谢您的帮助。您还有一个问题,有没有办法在XSL中学习一年?我尝试了很多方法,但都失败了。如果您使用的是XSLT1.0,那么就没有内置的方法。您必须使用扩展函数。看见
<xsl:copy-of select="Name/*[position() != last()]" />
<xsl:copy-of select="Name/*[not(self::Name6)]" />