如何在XSLT中向已创建的父标签<Stmt>内插入子标签
解决XSLT中重复生成节点的问题
你的问题出在两个<xsl:if>各自独立生成<Stmt>标签,导致满足条件时输出两个独立节点。要实现把第二个条件的<Acct>插入第一个的<Stmt>内部,核心是只生成一次<Stmt>,在其内部判断是否添加<Acct>。
错误代码示例(匹配你的当前实现逻辑)
<!-- 第一个条件生成独立Stmt --> <xsl:if test="条件1"> <Stmt> <!-- 第一个条件对应的内容 --> </Stmt> </xsl:if> <!-- 第二个条件生成另一个独立Stmt --> <xsl:if test="条件2"> <Stmt> <Acct> <!-- Acct相关解析内容 --> </Acct> </Stmt> </xsl:if>
修正后的代码
把第二个<xsl:if>嵌套进第一个的<Stmt>内部,这样只有第一个条件满足时才会生成<Stmt>,同时根据第二个条件决定是否在其中插入<Acct>:
<xsl:if test="条件1"> <Stmt> <!-- 第一个条件对应的原有解析内容 --> <!-- 嵌套第二个条件,满足则在Stmt内生成Acct --> <xsl:if test="条件2"> <Acct> <!-- Acct相关解析内容 --> </Acct> </xsl:if> </Stmt> </xsl:if>
特殊场景补充
如果存在「条件2满足但条件1不满足时,也需要生成带Acct的Stmt」的需求,可以调整逻辑为:
<xsl:if test="条件1 or 条件2"> <Stmt> <xsl:if test="条件1"> <!-- 第一个条件对应的解析内容 --> </xsl:if> <xsl:if test="条件2"> <Acct> <!-- Acct相关解析内容 --> </Acct> </xsl:if> </Stmt> </xsl:if>
这样就能确保无论哪种情况都只生成一个<Stmt>节点,内部根据条件填充对应内容。
内容的提问来源于stack exchange,提问作者Catanzaro
相关产品推荐
相关产品推荐

