Javascript 如何在XML中搜索关键字并向下滚动到它?

Javascript 如何在XML中搜索关键字并向下滚动到它?,javascript,xml,xslt,Javascript,Xml,Xslt,多亏了Bishiboosh和fmsf。作为 建议,我们要去做 通过看起来更明显的XSL 问题的答案(详细信息) 请阅读下面的问题) 我们必须创建一个XSL,它将 搜索关键字并与节点匹配 名称/值、属性名称/值等。 XML中的所有内容 XML <?xml version="1.0"?> <CustomerList> <Customer> <CustomerID>1111</CustomerID> <Company

多亏了Bishiboosh和fmsf。作为 建议,我们要去做 通过看起来更明显的XSL 问题的答案(详细信息) 请阅读下面的问题)

我们必须创建一个XSL,它将 搜索关键字并与节点匹配 名称/值、属性名称/值等。 XML中的所有内容

XML

<?xml version="1.0"?>
<CustomerList>
  <Customer>
    <CustomerID>1111</CustomerID>
    <CompanyName>Sean Chai</CompanyName>
    <City>New York</City>
    <NewCustomer>N</NewCustomer>
    </Customer>
  <Customer>
    <CustomerID>1112</CustomerID>
    <CompanyName>Tom Johnston</CompanyName>
    <City>Los Angeles</City>
    <NewCustomer>N</NewCustomer>
  </Customer>
  <Customer>
    <CustomerID>1113</CustomerID>
    <CompanyName>Institute of Art</CompanyName>
    <City>Chicago</City>
    <NewCustomer>Y</NewCustomer>
  </Customer>
</CustomerList>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:choose>
        <!-- 
        // We'll match the node/attribute name/values
        // with search text. If it is match to node 
        // name/value we have to put a div/b tag around
        // it or it is match to attribute then the div/b
        // tag will be around it's node.
        -->
        <xsl:when test="">
          <xsl:value-of select="" />
        </xsl:when>
        <xsl:otherwise>
          <xsl:apply-templates select="@* | node()"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
它是如何工作的?搜索结果将显示为超链接(如上面的结果链接1…3所示)。当用户单击其中一个链接时,架构将加载到框架B中,浏览器将滚动到搜索的关键字

如果您需要知道的话,还有一件更重要的事情需要提及,XML模式将在框架B中直接引用

$(iframe).src=“XMLSchema.xml”

首先,让我们假设几乎所有的初始工作都已完成,如搜索、处理、合成结果链接,然后单击它们,我们将在正确的框架(框架B)中获得正确的模式

问题是,当XML模式加载到正确的框架中时,它还应该滚动并突出显示第一个搜索的关键字

我认为突出显示不可能出现在那里,因为文档是XML格式的,而且正如我所说的,框架B直接引用了XML文件。但是,搜索和滚动有一个公平的可能性?对没有

您知道如何滚动到XML文件中搜索的关键字吗

谢谢


p.S:如果您有任何疑问,请发表评论。

AFAIK您将无法这样做。您必须在文档中确定一个可以滚动到的点。但在本例中,您使用的是XML文件作为iframe的源。XML仅用于存储数据,不包含任何定位属性。

不应直接在B帧中加载XML。XML显示因浏览器而异,例如在Chrome中,它只显示文本内容

有多种可能的方式以一种漂亮的方式显示XML:

  • 最简单的方法是:将XML显示为文本,并对其进行修饰。您将代码放在标记中,并使用例如来进行漂亮的打印
  • 更复杂一点,但做你想做的事情要容易得多:使用。概念很简单:定义一个XSL页面,它将告诉您如何将xml页面转换为html页面。我不知道如何在客户端实现,但互联网上有很多教程,xsl的使用可能是另一个问题

要滚动,您可以使用pulse和Bishiboosh已经提到的

,这是不可能的,而且不同浏览器显示XML的方式有很大差异

例如,W3XML的一个示例在Safari上显示如下:

这一个在Chrome上:

最后,Firefox


如果您自己显示XML,您的情况会好得多。

尝试使用XSL将XML转换为可查看的内容

Answer发表评论,请求更多信息:


XSL将XML转换为HTML。之后,对于滚动部分,您可以使用javascript滚动到您想要的位置。

您可以使用缩进、语法着色等将XML转换为HTML。

谢谢。我还认为我必须把它放在一个盒子里,而不是直接引用它。我们如何通过XSL实现它?我们如何通过XSL实现它?你能解释一下吗?谢谢。您有通过XSL与XML节点和属性名称/值匹配的漂亮代码吗?我已经更新了一个问题,在这里我展示了一个示例XSL,它可以做到这一点,但是我在给它一个条件,然后在find项周围增加粗体标记时遇到了一个问题。谢谢。我一定要调查一下。
            _________________________________________________ 
            | Search           |
            |__________________|    XML SCHEMA OPEN HERE ...
(1) FRAME A | Type here...     |       (2) FRAME B
            |__________________|
            |                  |
            | . RESULT LINK 1  |
            | . RESULT LINK 2  |
            | . RESULT LINK 3  |
            |                  |
            |                  |
            |                  |
            |                  |
            |                  |