如何在没有动态语言的情况下搜索XML文件?

时间:2011-01-14 00:24:14

标签: html xml xslt search

让我试着解释一下我的情况:

我们正在使用“烘焙”网站的CMS,然后将其发布到网络服务器。发布的站点仅包含静态HTML(或XML)页面(从CMS数据库中的内容生成)。

我使用公司电话簿中的姓名和电话号码导入了一个XML文件。

仅使用XSLT,我可以创建一种搜索该目录的方法吗?

例如,如果我的XML文件,directory.xml看起来像这样:

<directory>
<person>
 <fname>Ryan</fname>
 <lname>Purple</lname>
  <phone>887 778 5544</phone>
</person>
<person>
  <fname>Tanya</fname>
  <lname>Orange</lname>
  <phone>887 998 5541</phone>
</person>
<directory>

我可以创建一种方法来搜索姓氏以“Pur”开头的人吗?

  1. 我可以将参数传递给XSLT吗?

  2. 我可以搜索XML树以匹配参数中的字符串吗?

2 个答案:

答案 0 :(得分:2)

  

仅使用XSLT,我可以创建一种方法   搜索该目录?

  

我可以创建一种搜索方式吗?   姓氏开头的人   与“Pur”?

是。实际上,下面的转换允许搜索以2,3,4或5个字符开头的文本。它可以通用化,以允许搜索任何预定义的最大长度的起始字符串。

  

1.我可以将参数传递给XSLT吗?

即可。有关如何执行此操作的详细信息取决于所使用的特定XSLT处理器。例如 here 是如何将外部参数传递给.NET XslCompiledTransform.Transform()

  

2.我可以搜索XML树以匹配参数中的字符串吗?

是。这种转变

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pPattern" select="'Pur'"/>

 <xsl:key name="kPersonByLNameStart"
  match="person"  use="substring(lname,1,2)"/>
 <xsl:key name="kPersonByLNameStart"
  match="person"  use="substring(lname,1,3)"/>
 <xsl:key name="kPersonByLNameStart"
  match="person"  use="substring(lname,1,4)"/>
 <xsl:key name="kPersonByLNameStart"
  match="person"  use="substring(lname,1,5)"/>

 <xsl:template match="/">
  <results>
   <xsl:copy-of select=
    "key('kPersonByLNameStart', $pPattern)"/>
  </results>
 </xsl:template>
</xsl:stylesheet>

应用于此XML文档(提供的XML文档 - 已更正为格式良好且已扩展):

<directory>
    <person>
        <fname>Ryan</fname>
        <lname>Purple</lname>
        <phone>887 778 5544</phone>
    </person>
    <person>
        <fname>Tanya</fname>
        <lname>Orange</lname>
        <phone>887 998 5541</phone>
    </person>
    <person>
        <fname>Martin</fname>
        <lname>Purr</lname>
        <phone>887 778 5544</phone>
    </person>
</directory>

以最有效的方式生成所需的正确结果

<results>
   <person>
      <fname>Ryan</fname>
      <lname>Purple</lname>
      <phone>887 778 5544</phone>
   </person>
   <person>
      <fname>Martin</fname>
      <lname>Purr</lname>
      <phone>887 778 5544</phone>
   </person>
</results>

请注意

此代码显示如何有效搜索长度为2或3或4或5的前缀的文本。

答案 1 :(得分:0)

AJAX怎么样?这应该在没有服务器端协助的情况下运行,并且将完美地读取您的xml。 W3Schools有一个很好的介绍。

编辑:Blah,对不起,那没用..我忘记了即使在这里,你也需要使用服务器端脚本:/