我需要在XML中找到满足相当复杂条件的节点:
找到所有record
个孩子datafield
,其中属性tag
的值为" 020"
以下是xml的摘录:
<record xmlns="http://www.loc.gov/MARC21/slim" type="Bibliographic">
<leader>01201nam a2200349 c 4500</leader>
<controlfield tag="008">100218s2009 be ||||| |||| 00||||dut </controlfield>
<datafield tag="015" ind1=" " ind2=" ">
<subfield code="a">13,A50</subfield>
<subfield code="2">dnb</subfield>
</datafield>
<datafield tag="016" ind1="7" ind2=" ">
<subfield code="2">DE-101</subfield>
<subfield code="a">1000318389</subfield>
</datafield>
<datafield tag="020" ind1=" " ind2=" ">
<subfield code="a">9789044722369</subfield>
<subfield code="c">kart.</subfield>
<subfield code="9">978-90-447-2236-9</subfield>
</datafield>
....
</record>
目前我对制定XPath以匹配这些记录绝望。我试过了
<xsl:template match="//x:record[/x:datafield[@x:tag='020']]">
...
</xsl>
但没有匹配的记录(x是元素的nmespace)。但最多
<xsl:template match="//x:record[/x:datafield]">
...
</xsl>
它有效(选择所有record
有datafield
个孩子的{{1}}。
我做错了什么?是否不允许嵌套条件?
答案 0 :(得分:4)
默认名称空间仅适用于元素节点,不适用于属性节点,因此您需要使用@tag
而非@x:tag
的属性。
并且匹配模式开头的//
不是必需的。此外,x:datafield
元素是子元素,因此请使用相对路径match="x:record[x:datafield[@tag = '020']]"
。