2013-01-14 94 views
1

我有一个像抑制/删除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> 

我想压低身子/对/ @类型=“新”,我可以使用以下templete

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

说了这么多,我想实际添加另一个条件是,如果身体不包含其他任何其他元素,然后对/ @类型=“新”,然后整个身体元素应该被删除。

所以

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

任何帮助或暗示该怎么做......

+0

你能告诉我们什么对身体元素的模板的样子,如果你有一个?或者你的整个XSLT如果不是太长。 – JLRishe

+0

另外,如果你有一个没有子元素的** body **元素,会发生什么? –

+0

将身体总是有0或1“新的”第0或1“旧”第并没有别的? – JLRishe

回答

2

再来一个怎么样的模板:

<xsl:template match="Text[count(body/*) = count(body/para[@type = 'new'])]" /> 
+0

非常感谢Rishe ...我们是否也可以根据上述条件删除Text节点? – atif

+0

如果它不是太大,你能告诉我们你的整个XSL吗?很难给出一个明智的答案,否则。 – JLRishe

+0

我只有在XSL即这条规则的。 我们能不能申请第二tempalte到文本,而不是“体”,使文本元素会移除。 – atif

2

这里的另一种方式

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

即匹配一个元素与“new”类型的元素,但不包含第二个元素。