使用JavaScript在HTML中搜索XML

时间:2013-06-22 17:59:34

标签: javascript xml xslt

我会尝试尽可能简短地解释它。我有一个包含XML数据库的iframe标记。在它上面有一个文本字段和一个按钮,我想在其中添加一个函数,该函数从文本字段中获取值,并仅显示与特定XML标记的输入查询匹配的结果。

我该怎么做呢?我知道如何获得价值,但我必须实际显示匹配结果的部分是我不知道该怎么做。

如果有人关心,这是一个大学项目,他们只是想看到我们了解一些JavaScript基础知识。这是我希望看到上述内容的页面:

http://poorlymadelolfansite.co.nf/browse.html

1 个答案:

答案 0 :(得分:1)

在iframe中,您有一个带有处理指令的XML,告诉浏览器应用XSLT样式表,该样式表使用表将XML转换为HTML。因此,如果您使用Javascript访问iframe的文档,则无法找到XML元素,而是XSLT转换的结果HTML文档。

基于此,我认为您有两种选择:

  1. 您可以保持XSLT不变,并在iframe中编写HTML文档脚本以隐藏不应显示的表格行。
  2. 您调整XSLT为要过滤的值添加一个或两个参数,然后您需要使用浏览器公开的API来应用带有参数集的XSLT,并且您需要用以下内容替换iframe的内容新的转型结果。
  3. 这两种方法都没有“通过XML搜索......使用JavaScript”,因为在第一个选项中您将搜索HTML,而在第二个XSLT中将搜索XML,就像之前一样。

    至于通过Javascript访问iframe的文档,请使用

    var iframeDoc = window.frames.dsoChamps.document;
    

    然后使用

    访问该表
    var table = iframeDoc.getElementsByTagName('table')[0];
    

    然后您可以搜索table.rows集合以检查table.rows[i].cells[j].textContent是否具有您想要的值。您可以通过设置table.rows[i].style.display = 'none';隐藏一行,再次显示它,您只需设置table.rows[i].style.display = '';即可。作为替代方案,您可以简单地定义一个CSS类并设置要隐藏的行的className,并将其取消设置以再次显示行。

    有一点需要注意,textContent仅在最近的IE版本中受支持,对于旧版本,您需要检查innerText

    对于使用Javascript应用XSLT的替代方法,在Mozilla,Opera,Safari,Chrome中,您使用相同的API https://developer.mozilla.org/en/docs/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations,但是所有IE版本都需要使用不同的API http://msdn.microsoft.com/en-us/library/windows/desktop/ms762799%28v=vs.85%29.aspx

    对于XSLT,我至少会更改它以使用thead创建用于标题行的表,这是一个更干净的文档结构并简化您的任务以搜索行,因为您可以搜索table.tBodies[0].rows并忽略标题行。