1

我想通过存在 2 个子节点的值来选择节点,例如,给我 objecttype 节点值为 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>
4

2 回答 2

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'],'&#xd;',int[@name='objecttype'])"/>

...

  select="key('lookup',concat($id,'&#xd;',$type))"

这些都适用于 XSLT 1.0 和 XSLT 2.0。

于 2013-09-29T23:12:21.487 回答
1

我假设您想doc根据其子节点选择节点?如果是这样,给定您上面的 xml 示例,您将必须创建一个doc基于两个谓词(每个谓词都有自己的谓词)选择的 xpath。它可能看起来像这样:

<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>
于 2013-09-29T23:09:31.600 回答