我想通过存在2个子节点的值来选择节点,例如给我一个节点,其对象类型节点的值为5,对于objectid节点的值为2。
objectid和objecttype组合是唯一的,因此它将始终返回单个结果。
XSL语句是什么?
<response>
<result name="response" numFound="5" start="0">
<doc>
<str name="title">Tours</str>
<int name="objecttype">5</int>
<str name="friendlyurl">tours</str>
<str name="avatar">2_156_DSC01511.JPG</str>
<int name="objectid">2</int>
</doc>
<doc>
<str name="title">Celebrations Car</str>
<int name="objecttype">5</int>
<str name="friendlyurl">celebrations-car</str>
<str name="avatar">3_583_0509-0257-20x30-framed.jpg</str>
<int name="objectid">3</int>
</doc>
</result>
</response>
答案 0 :(得分:3)
考虑您在$id
和$type
中拥有搜索条件。
如果你有一个小文件:
/response/result/doc[int[@name='objectid']=$id and int[@name='objecttype']=$type]
如果您有数千个<doc>
元素:
<xsl:key name="lookup" match="doc"
use="concat(int[@name='objectid'],'
',int[@name='objecttype'])"/>
...
select="key('lookup',concat($id,'
',$type))"
这些在XSLT 1.0和XSLT 2.0中都有效。
答案 1 :(得分:1)
我假设您要根据其子节点选择doc
节点?如果是这样,给定上面的xml示例,你必须创建一个xpath,它根据两个谓词选择doc
(每个谓词都有自己的谓词。它可能看起来像这样:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="response/result/doc[int[@name='objecttype'] = '5' and int[@name='objectid'] = '2']" />
</xsl:template>
</xsl:stylesheet>
我在本地测试了这个,输出是:
<doc>
<str name="title">Tours</str>
<int name="objecttype">5</int>
<str name="friendlyurl">tours</str>
<str name="avatar">2_156_DSC01511.JPG</str>
<int name="objectid">2</int>
</doc>