替换XML我有类型的XML有条件使用XSLT
<A>
<B1>
<C1 attri= "xyz"/>
</B1>
<B2>
<C2>
<D2> replace </D2>
</C2>
</B2>
<A>
我的任务是检查C1属性,如果是“XYZ”,替换文本“替换”与“新文本” 。 任何想法?
替换XML我有类型的XML有条件使用XSLT
<A>
<B1>
<C1 attri= "xyz"/>
</B1>
<B2>
<C2>
<D2> replace </D2>
</C2>
</B2>
<A>
我的任务是检查C1属性,如果是“XYZ”,替换文本“替换”与“新文本” 。 任何想法?
<xsl:template match="D2">
<xsl:copy>
<xsl:choose>
<xsl:when test="/A/B1/[email protected] = 'xyz'">
<xsl:text>New Text</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
样式表的其余部分可以是标识转换。
谢谢,我试过类似的东西。但是当我意识到D2和A之间的节点级数不固定在3并且可能会有所不同时,我的问题变得更加复杂。所以我使用了祖先的Tag和//功能来根据需要跳起尽可能多的级别,并且它工作。但是现在我面临着另一个问题。我不仅需要修改没有固定数量级别的文本(使用祖先和//),还必须删除A标签(),如果是当然,我的属性匹配“xyz”。 任何建议我怎么能做到这一点? – XConfusion
研究答案中给出的模板。您会注意到模板文本中基本上有三个区域:第一个“when”元素(测试成功时评估)的内容,'otherwise'元素(测试失败时评估)以及其余部分模板(针对每个匹配元素进行评估)。如果您无法看到如何将该模式应用于匹配A的模板,并在适当的条件下调整它以保留或不保留A元素,那么您需要花一些时间来提高对程序工作方式的理解。 –
是否要输出完全相同的结构并且有(...)新文本 (...)'? –
saamorim
是的,只是内容文字必须被替换 – XConfusion