当前位置: 首页 > 知识库问答 >
问题:

XSLT复制父节点中的子节点

查宜修
2023-03-14

我需要将子元素复制到父元素中。

输入

<csv>
<row>
    <stuff>a</stuff>
    <more>1</more>
    <evenmore>123</evenmore>
    <row>
        <other>1345</other>
        <stuff>dga</stuff>
    </row>
</row>
<row>
    <stuff>b</stuff>
    <more>2</more>
    <evenmore>456</evenmore>
    <row>
        <other>4576</other>
        <stuff>jzj</stuff>
    </row>
</row>
</csv>

期望输出

<csv>
<row>
    <stuff>a</stuff>
    <more>1</more>
    <evenmore>123</evenmore>
    <other>1345</other>
    <stuff>dga</stuff>
</row>
<row>
    <stuff>b</stuff>
    <more>2</more>
    <evenmore>456</evenmore>
    <other>4576</other>
    <stuff>jzj</stuff>
</row>
</csv>

我尝试的内容(输出与输入保持相同):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

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

<xsl:template match="row">
    <xsl:copy>
        <xsl:apply-templates/>
        <xsl:apply-templates select="child::row/row/other | child::row/row/stuff"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

我肯定会错过一些非常简单的事情。子元素与父元素具有相同的名称,这应该不是问题?

共有1个答案

万博涛
2023-03-14

您确实需要第二个模板只匹配子,而不匹配父模板。然后可以选择它的子对象,但不能复制它本身

试试这个XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

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

<xsl:template match="row/row">
    <xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
 类似资料:
  • 我想从父节点复制到子节点。我真的不确定这是如何实现的。 我的源xml 我想得到输出为 我想要XSLT1.0中的解决方案。 我想将这些节点复制到子节点 谢谢。

  • 我需要以下xslt代码方面的帮助。我的意见如下: 我的预期输出为: 我曾尝试使用*/text()获取值节点的值,但我只从第一个孩子获得文本。将来我有很多这样的子元素。 提前谢谢。 你好,Minakshi

  • 我正在寻找下面输入和输出XML的XSLT(1.0)代码。 在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放了CN元素,但它可以是任何名称。 输入XML- 所需的输出XML- 先谢谢你。

  • 我认为主要的问题是如何编写exeption表达式来去除输出结果中的“S-3”和“Z”属性。但是怎么做呢? 源代码 期望输出 我的xslt代码(S-3和Z属性仍然存在,但不应该)https://xsltfiddle.liberty-development.net/3NSTbfj/1 我会感激任何解决办法

  • 如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?

  • 您能帮助我使用xslt实现以下预期输出吗。 输入 预期输出