匹配<a>tag followed by <img/>tag</a>的模板

时间:2012-07-03 04:52:33

标签: xslt

我想编写xslt模板以匹配Tag后跟img标记。

示例有效来源:

1.<a title="google site" href="http://google.com"><img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/></a>
2.<a title="Internal link" href="tcm:202-9720"><img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/></a>

无效:

1.<a title="google site" href="http://google.com"></a>
  <img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/>

2.<img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/>
 <a title="google site" href="http://google.com"></a>

3.<a title="google site" href="http://google.com"><img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/></a>
  <a title="Internal link" href="tcm:202-9720"><img style="width: 141px; height: 167px;" alt="Image" title="Image" src="tcm:202-11587"/></a>

4.<a><img/></a>

规则:

1.Only one Image should be allowed and it should be hyperlink.
2.There should be one <img> tag wrapped by one <a> tag.
3. Multiple images are not allowed.
4.Attributes for Image and a Tag.
5.No text is allowed for both the tags.

可以帮助您编写模板以符合此条件。

2 个答案:

答案 0 :(得分:1)

请记住,XSLT模板与标记不匹配,它们匹配元素。 a元素的开始标记后面紧跟着img元素的开始标记,但从XSLT的角度来看,您正在寻找的结构是一个将img元素作为唯一子元素的元素。

你的第四条规则“图像和标签的属性”。是不完整的:你还没有说明这两个元素的属性必须满足的条件。

您还没有明确表示您是否希望模板规则与img元素或a元素匹配。

这是一个匹配img元素的规则,只要包含一个元素有一个href属性:

match="a[@href]/img[not(preceding-sibling::node() or following-sibling::node())]"

答案 1 :(得分:0)

在模板的match属性中使用此xpath:

//a[count(@*)>0 and img[count(@*)>0] and count(.//*)=1 and normalize-space(.)='']

这会选择所有没有重要文本内容的a元素,属性和带有属性的单个img元素。