我的目标是将元素标记移动到特定位置。一些帮助将不胜感激。
这是我的输入
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<CHILD>
<C.1>1</C.1>
<C.2>something</C.2>
<C.3>
<A.1>AAA</A.1>
</C.3>
</CHILD>
<CHILD.2>
<ANOTHER.1>
<ID_1>
<PID.1>1</PID.1>
<PID.2>
<CX.1>18</CX.1>
<CX.4>
<HD.1>HHH</HD.1>
</CX.4>
<CX.5>CCC</CX.5>
</PID.2>
</ID_1>
<MOVEME>
<ME.1>1</ME.1>
<ME.2>
<M.1>10</M.1>
<M.2>some text string</M.2>
</ME.2>
<ME.3>MM</ME.3>
</MOVEME>
<ID_3/>
</ANOTHER.1>
<ANOTHER.2>
<RC>
<ORC.1>RR</ORC.1>
</RC>
<BR>
<OBR.1>1</OBR.1>
<OBR.2>
<EI.1>11</EI.1>
<EI.2>EIII</EI.2>
</OBR.2>
</BR>
<BR.1/>
<BR.2/>
</ANOTHER.2>
</CHILD.2>
<CHILD.3/>
</ROOT>
期望的输出
<ROOT>
<CHILD>...</CHILD>
<CHILD.2>
<ANOTHER.1>
<ID_1>...</ID_1>
//MOVEME IS NOW GONE
<ID_3/>
</ANOTHER.1>
<ANOTHER.2>...</ANOTHER.2>
</CHILD.2>
<CHILD.3/>
//DESTINATION WITH ALL IT ELEMENTS AND CONTENTS
<MOVEME>
<ME.1>1</ME.1>
<ME.2>
<M.1>10</M.1>
<M.2>some text string</M.2>
</ME.2>
<ME.3>MM</ME.3>
</MOVEME>
</ROOT>
到目前为止,它产生的输出却不太正确。它包括属于该特定标签的其他元素。我还在if语句中包含了不需要的标记,但它仍然无效。
我该如何避免?
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ROOT/*">
<xsl:for-each select="*">
<xsl:if test="(name() != 'CHILD') and (name() != 'CHILD.2') and (name() != 'CHILD.3') and (name() != 'ANOTHER.2')" >
<ZEI>
<xsl:apply-templates select="@* | node()"/>
</ZEI>
</xsl:if>
</xsl:for-each>
</xsl:template>
答案 0 :(得分:0)
我不认为你的尝试在任何地方都是领先的。这里的想法是将“移动”节点添加到您想要的位置,并防止将其复制到原始位置:
XSLT 1.0
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({ host: 'localhost:9200',
log: 'trace'});