1

我有一个像

<xml>
   <Text>
       <body>
       <para type="new"> This para needs to be suppress </para> 
       <para type="old"> This is an old para </para> 
       </body>     
  </Text>    
</xml>

我想抑制 body/para/@type='new' 我可以使用以下模板

<xsl:template match="para[@type='new']">
</xsl:template>

话虽如此,我实际上想添加另一个条件,即如果 body 不包含除 para/@type='new' 以外的任何其他元素,则应删除整个 body 元素。

所以

 <xml>
   <Text>
       <body>
       <para type="new"> This para needs to be suppress </para> 
       </body>     
  </Text>    
</xml>

应该返回

<xml>
   <Text>
   </Text>    
</xml>

<xml>
    <Text>
       <body>
          <para type="new"> This para needs to be suppress </para> 
          <para type="old"> This is an old para </para> 
       </body>     
    </Text>    
</xml>

应该返回

<xml>
   <Text>
       <body>
       <para type="old"> This is an old para </para> 
       </body>     
  </Text>    
</xml>

任何帮助或提示如何做到这一点......

4

2 回答 2

2

再来一个模板怎么样:

<xsl:template match="Text[count(body/*) = count(body/para[@type = 'new'])]" />
于 2013-01-14T16:03:38.230 回答
2

这是另一种方式

<xsl:template match="body[para[@type='new']][not(*[2])]" />

即,将body元素与'new' 类型的para元素匹配,但不匹配第二个元素。

于 2013-01-14T16:07:56.937 回答