祝你好运,
我使用Castor将网络基础架构映射到Java类。我的XML文件如下所示:
<SPECTRUM_Topology>
<Topology>
<!-- Device information -->
<Device ip_dnsname="172.20.162.1" ... />
</Topology>
<Update>
<Device ip_dnsname="172.20.162.1">
<!-- Port information -->
<Port ... />
<Port ... />
</Device>
</Update>
</SPECTRUM_Topology>
我需要文件看起来像这样:
<SPECTRUM_Topology>
<Topology>
<!-- Device information -->
<Device ip_dnsname="172.20.162.1" ...>
<!-- Port information -->
<Port ... />
<Port ... />
</Device>
</Topology>
</SPECTRUM_Topology>
有没有办法通过XSLT做到这一点?
答案 0 :(得分:2)
不确定。只需创建一个与拓扑中的Device标记匹配的特定模板,然后在其中插入更新/设备标记内容。
这可能会让你开始:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="devices" match="/SPECTRUM_Topology/Update/Device" use="@ip_dnsname"/>
<xsl:template match="Device">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="key('devices', @ip_dnsname)/*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:if test="not(self::Update)">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>