让我试着解释一下我的情况:
我们正在使用“烘焙”网站的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”开头的人吗?
我可以将参数传递给XSLT吗?
我可以搜索XML树以匹配参数中的字符串吗?
答案 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,对不起,那没用..我忘记了即使在这里,你也需要使用服务器端脚本:/