2010-01-06 53 views
2

感謝Bishiboosh和fmsf。由於 建議,我們打算通過XSL 這看起來更明顯 答案的問題(詳細 請閱讀下面的問題)。如何搜索XML中的關鍵字並向下滾動窗口?

我們不得不建立一個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

<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> 

我有在 XSL完成的問題。我們想幫助 完成任務。

謝謝。

嗨,

我已經在一個產品的基於Web的幫助系統添加一個功能。外觀和感覺與功能幾乎相同,就像我們在桌面軟件中看到的那樣,幫助在按F1時彈出。

我必須添加的功能是一個搜索功能,用戶輸入一個文本,一個Ajax將被調用,並且該請求將指向服務器,在那裏它將組成響應作爲XML,其中將包含XML模式列表。這已經完成了!除。

讓我先劃掉應用程序UI。所以,當我們用技術細節討論這個時,你會有更好的想法。

  _________________________________________________ 
      | Search   | 
      |__________________| XML SCHEMA OPEN HERE ... 
(1) FRAME A | Type here...  |  (2) FRAME B 
      |__________________| 
      |     | 
      | . RESULT LINK 1 | 
      | . RESULT LINK 2 | 
      | . RESULT LINK 3 | 
      |     | 
      |     | 
      |     | 
      |     | 
      |     | 

它是如何工作的?搜索結果將顯示爲超鏈接(如上面的RESULT LINK 1 ... 3所示)。當用戶單擊其中一個鏈接時,模式將被加載到框架B中,並且瀏覽器滾動到搜索的關鍵字。

多了一個你需要知道的情況下提重要的事情,XML模式將直接提及在框架B.即

$(iframe).src = "XMLSchema.xml"

首先,讓我們假設幾乎所有的前期工作已經完成樣搜索,處理,化妝結果鏈接並點擊它們,我們就可以在正確的框架中獲得正確的模式(框架B)。

問題是,當XML模式加載到正確的框架時,它也應該滾動並突出顯示第一個搜索到的關鍵字。

我不認爲突出顯示是可能的,因爲文檔是XML格式的,正如我告訴框架B有一個XML文件的直接引用。但是,搜索和滾動有一個公平的概率?是?沒有?

你知道我怎樣才能滾動到XML文件中的搜索關鍵字?

謝謝。

P.S:如果您有任何查詢請評論。

回答

2

嘗試使用XSL將XML轉化爲可查看的內容。

Ansewer置評請求更多信息:

XSL轉換XML轉換成HTML。之後對於滾動部分,您可以使用JavaScript滾動到您想要的位置。

+0

我們如何通過XSL來做到這一點?你能解釋一下嗎? – 2010-01-06 13:35:57

+0

謝謝。你有通過XSL與XML節點和屬性名/值匹配的漂亮代碼嗎?我已經更新了這個問題,在這裏我展示了一個示例XSL,但是我遇到了一個問題,以便爲它提供一個條件,然後在查找項目周圍遞增大膽標記。 – 2010-01-08 04:10:33

1

AFAIK你將無法做到這一點。您必須在您的文檔中確定一個可以滾動到的點。但在你的情況下,你正在使用一個XML文件作爲iframe的來源。 XML僅用於存儲數據並且不包含任何定位屬性。

2

您不應該直接在B框架中加載XML。 XML顯示根據瀏覽器的不同而不同,例如在Chrome瀏覽器中,它只顯示文本內容。

有多種可能方式,在一個漂亮的方式顯示XML:

  • 簡單的一個:顯示XML文本,並美化它。你把你的代碼放在標籤中,例如使用google-code-prettify來打印漂亮。
  • 稍微複雜一點,但是更容易做到你想要的:使用XSLT。這個概念很簡單:你定義一個XSL頁面,它會告訴你如何將你的xml頁面轉換爲html頁面。我不知道如何去做客戶端,但是互聯網上有很多教程,使用xsl可能是另一個SO問題。

要滾動,你可以使用已經通過脈衝和Bishiboosh提到window.scrollTo

+1

謝謝。我也認爲我必須把它放在一個盒子裏,而不是直接引用它。 – 2010-01-06 13:05:29

+0

我們如何通過XSL來做到這一點? – 2010-01-06 13:35:19

+0

增加了一些答案 – 2010-01-06 14:08:59

0

您可以使用xmlverbatim將您的XML轉換爲帶有縮進,語法着色等的HTML。

+0

謝謝。我肯定會研究它。 – 2010-01-18 04:18:55