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