2013-07-05 37 views
0

替换XML我有类型的XML有条件使用XSLT

<A> 
    <B1> 
     <C1 attri= "xyz"/> 
    </B1> 

    <B2> 
     <C2> 
      <D2> replace </D2> 
     </C2> 
    </B2> 
<A> 

我的任务是检查C1属性,如果是“XYZ”,替换文本“替换”与“新文本” 。 任何想法?

+0

是否要输出完全相同的结构并且有(...)新文本(...)'? – saamorim

+0

是的,只是内容文字必须被替换 – XConfusion

回答

0
<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> 

样式表的其余部分可以是标识转换。

+0

谢谢,我试过类似的东西。但是当我意识到D2和A之间的节点级数不固定在3并且可能会有所不同时,我的问题变得更加复杂。所以我使用了祖先的Tag和//功能来根据需要跳起尽可能多的级别,并且它工作。但是现在我面临着另一个问题。我不仅需要修改没有固定数量级别的文本(使用祖先和//),还必须删除A标签(),如果是当然,我的属性匹配“xyz”。 任何建议我怎么能做到这一点? – XConfusion

+0

研究答案中给出的模板。您会注意到模板文本中基本上有三个区域:第一个“when”元素(测试成功时评估)的内容,'otherwise'元素(测试失败时评估)以及其余部分模板(针对每个匹配元素进行评估)。如果您无法看到如何将该模式应用于匹配A的模板,并在适当的条件下调整它以保留或不保留A元素,那么您需要花一些时间来提高对程序工作方式的理解。 –