2011-01-14 58 views
1

让我试着解释一下我的情况:如何在不使用动态语言的情况下搜索XML文件?

我们使用一个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> 

我可以创建一个方法来搜索与开始“飘”姓的人?

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

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

+2

技术上的一些前缀如何高效地搜索文本,你可以,问题是你如何去执行XSLT前提是您的Web系统是静态html,并且我认为您的XML文件不会被每个客户端下载,或者它是?如果是这样,你可以在客户端使用XSLT,但这不是一个有效的方法。 – 2011-01-14 00:29:56

回答

2

只使用XSLT,我可以创造一个办法 搜索该目录?

是的。

我可以创建一个方法来搜索一个 人用起 与“飘”的姓氏?

是的。实际上,下面的转换允许搜索以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

0

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

编辑:胡说,对不起,这是useless..I'd忘记了,即使在这里,你需要使用服务器端脚本:/

相关问题