Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跨子节点移动元素_Java_Xml_Xslt - Fatal编程技术网

Java 跨子节点移动元素

Java 跨子节点移动元素,java,xml,xslt,Java,Xml,Xslt,我在主题下有多个子节点。我需要将元素从一个子节点[根据条件]移动到另一个子节点[根据条件] 我的输入xml如下所示。我希望遍历所有主题,并将class元素从title=“wivel”复制到title=“books” abc 野生动物 书 图书馆 我的输出XML应该如下所示: <node-A> <logs>abc</logs> <topics> <topic> <t

我在主题下有多个子节点。我需要将元素从一个子节点[根据条件]移动到另一个子节点[根据条件]

我的输入xml如下所示。我希望遍历所有主题,并将class元素从title=“wivel”复制到title=“books”


abc
野生动物
书
图书馆
我的输出XML应该如下所示:

    <node-A>
    <logs>abc</logs>
    <topics>
        <topic>
            <topic-header>
                <title>wildlife</title>
            </topic-header>
            <basis>
                <variant>
                    <property>
                        <class code="books" description="books" sourceSystem="">books
                        </class>
                    </property>
                </variant>
            </basis>
        </topic>
        <topic>
            <topic-header>
                <title>library</title>
            </topic-header>
            <basis>
                <variant>
                    <property>
                        <x></x>
                        <y></y>
                        <z></z>
<class code="books" description="books" sourceSystem="">books
                        </class>
                    </property>
                </variant>
            </basis>
        </topic>
    </topics>
</node-A>

abc
野生动物
书
图书馆
书

您可以试试这个:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="property[not(class)]">
    <xsl:copy>
        <xsl:apply-templates/>
        <xsl:apply-templates select="//property/class"/>
    </xsl:copy>
</xsl:template>


使用xslt?你试了什么?问题似乎没有很好地定义。如果class元素有多个
主题
s怎么办?应该使用哪一个?我们需要使用XSLT。我不知道在这里该试什么。请给出一些提示。每个主题都会有class元素,但我需要从topic/topic header/title=“wivel”中选择,并将其粘贴到具有“books”标题的子节点中。我会将class元素选择到一个变量中。然后在模板中使用它。我不确定是否还有其他方法。我尝试过使用变量,但实际上我有50多个元素需要迁移[就像代码一样],所以我最终会创建50个变量。我的解决方案被放弃了。当我找到“books”时,你知道如何改变模式吗?它从所有主题节点复制类元素。我只需要从野生动物复制到图书馆。我们可以在这里添加一些条件检查。请尝试
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
<xsl:template match="property[not(class)]">
    <xsl:copy>
        <xsl:apply-templates/>
        <xsl:apply-templates select="//property/class"/>
    </xsl:copy>
</xsl:template>