2014-03-03 54 views
0

我有以下输入XML:对_any_子节点使用'contains' - 只匹配第一个孩子?

<relations> 
<parent> 
<child>a</child> 
<child>b</child> 
<child>c></child> 
</parent> 
<parent> 
<child>x</child> 
<child>y</child> 
<child>z></child> 
</parent> 
</relations> 

而我感兴趣的只是在处理其子节点(任何人)的含有特定字符串“父”节点;我创建了以下XSLT(1.0) - 但这显然只对第一个孩子应用'contains'函数?

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="relations" /> 
    </xsl:template> 
    <xsl:template match="relations"> 
     <xsl:apply-templates select="parent[ contains(child, 'a') ]" /> 
    </xsl:template> 
    <xsl:template match="parent"> 
     <xsl:text>FOUND A MATCH, </xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

那就是:如果我不过是一个“A”或“X”“包含”功能为我输入的文件,我得到一个匹配,但如果我把一个“B”,“C” ,'y'或'z' - 它不再返回true。

如何重新编写这个匹配项,当任何孩子匹配包含?

回答

1

包含需要一个字符串作为第一个参数,所以在你的声明只会看一个的第一孩子元素。

尝试重新写它,因为这

<xsl:apply-templates select="parent[child[contains(., 'a')]]" /> 

这应该找到谁拥有元素,其文本中包含“A”

+0

谢谢 - 证实了这一工作:我测试“ b'(这是一个孩子)和'h'(不是) - 结果证实了这一点。我在等SOF计时器让我接受答案。 – monojohnny

相关问题