我有一个这样的XML文档:XSLT1选择兄弟姐妹的孩子节点值
(P为先前定义)
<p:Players>
<p:Player>
<p:Name>David</p:Name>
<p:Club>
<p:Name>Madrid</p:Name>
</p:Club>
<p:PreviousClubs>
<p:Club><p:Name>Milan</p:Name></p:Club>
<p:Club><p:Name>Manchester</p:Name></p:Club>
</p:PreviousClubs>
</p:Player>
<p:Player>
<p:Name>Alex</p:Name>
<p:Club>
<p:Name>Madrid</p:Name>
</p:Club>
<p:PreviousClubs>
<p:Club><p:Name>Birmingham</p:Name></p:Club>
<p:Club><p:Name>Manchester</p:Name></p:Club>
</p:PreviousClubs>
</p:Player>
<p:Player>
<p:Name>Fred</p:Name>
<p:Club>
<p:Name>Madrid</p:Name>
</p:Club>
<p:PreviousClubs>
<p:Club><p:Name>Milan</p:Name></p:Club>
<p:Club><p:Name>Birmingham</p:Name></p:Club>
</p:PreviousClubs>
</p:Player>
</p:Players>
我想获得的所有谁以前已经将球员的名字为特定的俱乐部效力。
这是我迄今为止,但它不捡东西了:
/*[1]/p:Player[p:PreviousClubs/p:Club/p:Name='Manchester']/p:Name/text()
我希望回到
David
Alex
但我什么也没得到
可有人看看我要去哪里错了?
p:的命名空间及其前缀是正确的 - 在其他地方使用并且很好。我觉得我的逻辑围绕选择特定的父节点是错误的...
我需要坚持XSLT 1.0作为其BizTalk驱动。
我认为这可能与命名空间有关。在您的XML示例中,您根本没有指定名称空间,因此所有元素都属于NO名称空间。如果您在XSLT的xpath表达式中使用** p **的名称空间前缀,那么它将查找为** p **前缀定义的名称空间-Uri内的元素。你的输入XML确实没有定义名称空间吗? –
它确实有名称空间定义,我快速复制而不是复制和粘贴 - 命名空间不是问题,但它只是没有选择文本值。我复制并粘贴命名空间 - 我现在编辑xml,以便它匹配 – Chris
啊,好的!你能不能在你的XML中显示** p **前缀的定义(即命名空间url,比如'
'。你显然需要检查uri与XSLT中指定的相同,如果你展示了更多的实际XSLT,以防万一问题出在其他地方,也可能有所帮助谢谢! –