我有下面的XML。我想处理每个fields元素,并根据elem3的值,用剩余的元素做各种事情:
案例1:删除elem1,将elem2修改为不同的值
案例2:添加elem5,将elem1修改为不同的值
我可能在每个元素下都有各种子节点,所以我不能总是依赖于elem1和elem2固定的名称。
<Sample>
<fields>
<elem1>Something1</elem1>
<elem2>SomethingElse1</elem2>
<elem3>type1</elem3>
</fields>
</Sample>
<Sample>
<fields>
<elem1>Something2</elem1>
<elem2>SomethingElse2</elem2>
<elem3>type2</elem3>
<elem4>sss</elem4>
</fields>
</Sample>
<Sample>
<fields>
<elem1>Something3</elem1>
<elem2>SomethingElse3</elem2>
<elem3>type3</elem3>
</fields>
</Sample>
我已经能够识别出我想要做的字段元素,如下所示:
<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()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="fields[elem3='type1']">
</xsl:template>
<xsl:template match="fields[elem3='type2']">
</xsl:template>
</xsl:stylesheet>
但是现在我试图找出个人模板中的内容,以便按照自己的意愿进行操作。
答案 0 :(得分:0)
您可以更具体地匹配您想要影响的节点,例如:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- suppress -->
<xsl:template match="elem1[../elem3='type1']"/>
<!-- modify value -->
<xsl:template match="elem2[../elem3='type1']/text()">
<xsl:value-of select="'New Value'"/>
</xsl:template>
<!-- add elem -->
<xsl:template match="fields[elem3='type2']">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<elem5/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
但是,我不确定你的意思是:
那么,可以依赖什么?我不能完全依赖于被修复为elem1和elem2的名称。