【问题标题】:How can I search an XML file without a dynamic language?如何在没有动态语言的情况下搜索 XML 文件?
【发布时间】:2011-01-14 00:24:14
【问题描述】:

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

我们正在使用“烘焙”网站的 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 树以匹配参数中的字符串吗?

【问题讨论】:

  • 从技术上讲,你可以,问题是如果你的 Web 系统是静态 html,你将如何实现 XSLT,并且我假设你的 XML 文件不会被每个客户端下载,或者是吗?如果是,您可以在客户端使用 XSLT,但这并不是一种有效的方法。
  • 我在工作中必须处理类似的 CMS。你有我的哀悼。
  • 好问题,+1。请参阅我对您所有问题的回答以及完整、简短且高效的 XSLT 解决方案。 :)
  • 这听起来更像是一个网站管理员的问题。如果服务器上什么都不能执行(静态内容),那么一切都必须在客户端执行。如果您要搜索数据库,该数据库也应该下载到客户端。如果它是一个大数据库,我认为人们会讨厌你......

标签: html xml xslt search


【解决方案1】:

仅使用 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 的前缀的文本。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2013-06-02
      • 2017-05-25
      • 2021-06-03
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多