我想编写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.
可以帮助您编写模板以符合此条件。
答案 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
元素。