使用JavaScript在HTML中搜索XML

使用JavaScript在HTML中搜索XML,javascript,xml,xslt,Javascript,Xml,Xslt,我会尽量简短地解释。我有一个iframe标记,它包含一个XML数据库。在它上面有一个textfield和一个按钮,我想在上面添加一个函数,该函数从textfield获取值,并仅显示与输入的特定XML标记查询匹配的结果 我该怎么做呢?我知道如何获取值,但实际上我必须只显示匹配结果的部分是我不知道如何做的 如果有人关心的话,这是一个大学项目,他们只是想看看我们了解一些JavaScript基础知识。以下是我希望看到上述情况发生的页面: 在iframe中,您有一个带有处理指令的XML,告诉浏览器应用XS

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

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

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


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

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

  • 您可以保持XSLT不变,并在iframe中编写HTML文档脚本,以隐藏不应显示的表行
  • 您可以调整XSLT,为要筛选的值添加一个或两个参数,然后需要使用浏览器公开的API将XSLT应用于参数集,并且需要用新的转换结果替换iframe的内容
  • 这两种方法都不会像第一种方法那样通过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版本中受支持,对于较旧的IE版本,您需要检查
    innerText

    对于使用Javascript应用XSLT的替代方案,在Mozilla、Opera、Safari和Chrome中,您有相同的API,但是所有IE版本都需要使用不同的API


    至于XSLT,我至少会将其更改为使用标题行的
    thead
    创建表,这是一种更干净的文档结构,简化了搜索行的任务,就像搜索
    table.tBodies[0].rows
    并将忽略标题行。

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

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

  • 您可以保持XSLT不变,并在iframe中编写HTML文档脚本,以隐藏不应显示的表行
  • 您可以调整XSLT,为要筛选的值添加一个或两个参数,然后需要使用浏览器公开的API将XSLT应用于参数集,并且需要用新的转换结果替换iframe的内容
  • 这两种方法都不会像第一种方法那样通过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版本中受支持,对于较旧的IE版本,您需要检查
    innerText

    对于使用Javascript应用XSLT的替代方案,在Mozilla、Opera、Safari和Chrome中,您有相同的API,但是所有IE版本都需要使用不同的API

    至于XSLT,我至少会将其更改为使用标题行的
    thead
    创建表,这是一种更干净的文档结构,简化了搜索行的任务,就像搜索
    table.tBodies[0].行一样,并且会忽略标题行