我想对一个xml进行一些修改我尝试使用xslt句子但我无法做到,复制后我在尝试进行更改时删除了子节点。 发布了xml:
`
<tree>
<sublevel>
<definition>subnetting</definition>
<status>availabe</status>
<categories>
<category>
<label>IPV4</label>
<attributes>
<attribute>
<label>MASK</label>
<value>/24</value>
</attribute>
<attribute>
<label>STARTING_IP</label>
<value>10.0.0.1</value>
</attribute>
<attribute>
<label>Type</label>
<value>4</value>
</attribute>
</attributes>
</category>
</categories>
<identifier>subnetworkipv4correct</identifier>
</sublevel>
</tree>
我想使用一个xslt来执行输出:
`
<tree>
<sublevel>
<definition>subnetting</definition>
<status>availabe</status>
<origen>template</origen>
<categories>
<category>
<label>IP</label>
<attributes>
<attribute>
<label>Mask</label>
<value>/24</value>
</attribute>
<attribute>
<label>START</label>
<value>10.0.0.1</value>
</attribute>
<attribute>
<label>Version</label>
<value>4</value>
</attribute>
</attributes>
</category>
</categories>
<identifier>subnetworkipv4correct</identifier>
</sublevel>
</tree>
`
我测试了很多模板,但我无法做到。
答案 0 :(得分:1)
您需要更准确地了解您为完整答案所做的事情,但希望有一些指示应该有所帮助。使用标识模板,并为需要删除/更改的特定元素覆盖它。
要删除origen
元素,请使用:
<xsl:template match="origen"/>
这只是匹配它,并且不输出任何内容,有效地删除它。
要修改label
元素,您可以使用:
<xsl:template match="category/label[. = 'IPV4']/text">IP</xsl:template>
或者:
<xsl:template match="category/label/text()">
<xsl:choose>
<xsl:when test=". = 'IPV4']">IP</xsl:when>
<xsl:otherwise>(default)</xsl:otherwise>
</xsl:choose>
</xsl:template>
您可以用类似的方式更改其他元素的值。
答案 1 :(得分:0)
此转化:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="status[. = 'availabe']">
<xsl:call-template name="identity"/>
<origen>template</origen>
</xsl:template>
<xsl:template match="label/text()[. = 'IPV4']">IP</xsl:template>
<xsl:template match="label/text()[. = 'STARTING_IP']">START</xsl:template>
<xsl:template match="label/text()[. = 'Type']">Version</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<tree>
<sublevel>
<definition>subnetting</definition>
<status>availabe</status>
<categories>
<category>
<label>IPV4</label>
<attributes>
<attribute>
<label>MASK</label>
<value>/24</value>
</attribute>
<attribute>
<label>STARTING_IP</label>
<value>10.0.0.1</value>
</attribute>
<attribute>
<label>Type</label>
<value>4</value>
</attribute>
</attributes>
</category>
</categories>
<identifier>subnetworkipv4correct</identifier>
</sublevel>
</tree>
产生完全想要的结果:
<tree>
<sublevel>
<definition>subnetting</definition>
<status>availabe</status>
<origen>template</origen>
<categories>
<category>
<label>IP</label>
<attributes>
<attribute>
<label>MASK</label>
<value>/24</value>
</attribute>
<attribute>
<label>START</label>
<value>10.0.0.1</value>
</attribute>
<attribute>
<label>Version</label>
<value>4</value>
</attribute>
</attributes>
</category>
</categories>
<identifier>subnetworkipv4correct</identifier>
</sublevel>
</tree>
注意:为了更系统,更牢固地掌握XSLT,请观看我的Pluralsight课程&#34; XSLT 2.0 and 1.0 Foundations&#34;