以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  如何使用xls做组合查询  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=87314)


--  作者:dongle2001
--  发布时间:10/26/2010 4:54:00 PM

--  如何使用xls做组合查询
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">
0
</int>
<int name="QTime">
696
</int>
<lst name="params">
<str name="shards">
10.1.3.160:8983/solr/ik,10.1.3.160:8983/solr/mmseg,10.1.3.160:8983/solr/patabs
</str>
<str name="indent">
on
</str>
<str name="start">
0
</str>
<str name="q">
test
</str>
<str name="version">
2.2
</str>
<str name="rows">
50
</str>
</lst>
</lst>
<result name="response" numFound="2903" start="0">
<doc>
<str name="id">
200310117134
</str>
<str name="zh">
1111111111111111111111111111111111111111111111111
</str>
<str name="en">
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
</str>
</doc>
</result>
</response>

xml格式如上所示,里面有很多不同内容的doc元素.我想查询id的值包含'2004'以及zh的值包含'说明'文字的所有节点。下面是我写的xls,但是无法得到结果,正确的写法应该怎么写,求高手帮忙。


<?xml version="1.0" encoding="UTF-8"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <title>组合查询</title>
  </head>
  <body>
    <xsl:comment>使用一个查询条件查询结果集,示例为查询带有'说明'文本以及id以'2004'开头的节点。</xsl:comment>
    <table border="0">
     <tr>
        <td>查询时间:</td>
        <td><xsl:value-of select="//int[@name='QTime']"/></td>
        <td>关键字:</td>
        <td><xsl:value-of select="//str[@name='q']"/></td>
        <td>结果个数:</td>
        <td><xsl:value-of select="//str[@name='rows']"/></td>
       </tr>
    </table>
    <table border="0">
      <tr bgcolor="#9acd32">
        <th>ID:</th>
        <th>原文:</th>
        <th>译文:</th>
     </tr>
     <xsl:for-each select="response/result/doc">
      <xsl:if test="str[@name='id' and contains(., '2004')] and str[@name='en' and contains(., '说明')]">
        <tr>
            <td width="10%"><b><xsl:value-of select="str[@name='id']"/></b></td>
            <td width="40%"><font color="ff0000"><xsl:value-of select="str[@name='zh']"/></font></td>
            <td width="50%"><xsl:value-of select="str[@name='en']"/></td>
        </tr>
      </xsl:if>
     </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>


--  作者:hjx_221
--  发布时间:10/27/2010 5:24:00 PM

--  
谢谢楼主............
--  作者:Qr
--  发布时间:10/27/2010 9:26:00 PM

--  
<xsl:if test="str[@name='id' and contains(., '2004')] and str[@name='en' and contains(., '说明')]">
以上只会匹配第一个str,故无法查询到你所想的结果。
<xsl:if test="(str[1][@name='id' and contains(., '2004')]) and (str[3][@name='en' and contains(., '说明')])">

未经测试,只根据你的需要和描述,修改查询条件。


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms