我坚持使用XSLT转换,因为我很新并开始学习。
输入XML
<SHOW_LIST>
<SHOW ID="12345">
<SHOW_INFO>xxx</SHOW_INFO>
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="1">
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="12345678"></SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
</SHOW_ELEMENT>
<SHOW_ELEMENT ID="2">
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="12345666"></SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
</SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
<SECONDARY_ELEMENT_LIST/>
<ALTERNATIVE_SHOW_LIST>
<SHOW ID="54321">
<SHOW_INFO>xxxa</SHOW_INFO>
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="3"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="4"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="5"> </SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
<SECONDARY_ELEMENT_LIST/>
</SHOW>
<SHOW ID="54322">
<SHOW_INFO>xxxb</SHOW_INFO>
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="6"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="7"> </SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
<SECONDARY_ELEMENT_LIST/>
</SHOW>
</ALTERNATIVE_SHOW_LIST>
</SHOW>
OUTPUT XML:
<SHOW_LIST>
<SHOW ID="12345">
<SHOW_INFO>xxx</SHOW_INFO>
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="1"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="2"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="3"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="4"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="5"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="6"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="7"> </SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
<SECONDARY_ELEMENT_LIST/>
<ALTERNATIVE_SHOW_LIST>
<SHOW ID="54321">
<SHOW_INFO>xxxa</SHOW_INFO>
<SECONDARY_ELEMENT_LIST/>
</SHOW>
<SHOW ID="54322">
<SHOW_INFO>xxxb</SHOW_INFO>
<SECONDARY_ELEMENT_LIST/>
</SHOW>
</ALTERNATIVE_SHOW_LIST>
</SHOW>
</SHOW_LIST>
我能够导航到Alternative_show_list并且无法复制SHOW_ELEMENTS并与主SHOW_ELEMENT_LIST合并。
任何人都帮助我执行此操作
同一输入文件的另一个输出
<SHOW_LIST>
<SHOW ID="12345">
<SHOW_INFO>xxx</SHOW_INFO>
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="1"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="2"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="3"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="4"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="5"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="6"> </SHOW_ELEMENT>
<SHOW_ELEMENT ID="7"> </SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
<SECONDARY_ELEMENT_LIST/>
</SHOW>
</SHOW_LIST>
现在我正在尝试这种输出。
新输出XML
<?xml version="1.0" encoding="UTF-8"?>
<SHOW_LIST>
<SHOW ID="12345">
<SHOW_INFO>xxx</SHOW_INFO>
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="1">
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="12345678"></SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
</SHOW_ELEMENT>
<SHOW_ELEMENT ID="2">
<SHOW_ELEMENT_LIST>
<SHOW_ELEMENT ID="12345666"></SHOW_ELEMENT>
</SHOW_ELEMENT_LIST>
</SHOW_ELEMENT>
<SHOW_ELEMENT ID="3"/>
<SHOW_ELEMENT ID="4"/>
<SHOW_ELEMENT ID="5"/>
<SHOW_ELEMENT ID="6"/>
<SHOW_ELEMENT ID="7"/>
</SHOW_ELEMENT_LIST>
<SECONDARY_ELEMENT_LIST/>
</SHOW>
</SHOW_LIST>
答案 0 :(得分:0)
这个简单的样式表可以解决这个问题:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- get all the SHOW_ELEMENT nodes -->
<xsl:template match="SHOW//SHOW_ELEMENT_LIST[not(ancestor::ALTERNATIVE_SHOW_LIST)]">
<SHOW_ELEMENT_LIST>
<xsl:copy-of select="..//SHOW_ELEMENT"/>
</SHOW_ELEMENT_LIST>
</xsl:template>
<!-- delete all SHOW_ELEMENT_LIST under ALTERNATIVE_SHOW_LIST -->
<xsl:template match="SHOW//SHOW_ELEMENT_LIST[ancestor::ALTERNATIVE_SHOW_LIST]"/>
</xsl:stylesheet>
答案 1 :(得分:0)
<xsl:template match="ALTERNATIVE_SCHEDULE_LIST"/>
这有助于第二个输出XML删除ATERNATIVE_SCHEDULE_LIST元素。 如果有任何其他解决方案,请纠正我