2011-10-24 40 views
1

我想使用某種類型的XML過濾,使用javascript w/jQuery。我還不是很熟悉xslt。我已經看到,該文檔總是有一個XML文檔和一個特定的樣式(XSL)。然後,結果以XHTML呈現。我真的只想抓住一些XML,過濾(通過節點名稱,某些屬性等)並生成該XML的(過濾/更小)版本。你認爲xslt方法最簡單嗎?用於使用javascript過濾XML文檔的XSLT

在此先感謝

+0

如果輸入是有效的XML(傳遞解析器),那麼是的,XSLT對於轉換XML文檔非常方便。 – mizo

+1

這可能會幫助你http://johannburkard.de/software/xsltjs/ – Rafay

+0

感謝您的評論。我已經看到了這個庫,但不幸的是它缺少適當的文檔和示例:( – jose

回答

2

我真的只是想抓住一些XML,過濾器(按節點名稱,一些 屬性等),產生一個(過濾/小)是XML的版本。 您認爲xslt方法最簡單嗎?

XSLT是一種專門用於轉換樹型結構輸入的語言。這就是爲什麼它可能是實施這些任務的最好也是最簡單的。

下面是一個例子

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 

我們希望從這個XML文檔中產生具有相同的結構和元素名稱/內容,但只包含原始文檔的num元素另一個文檔,其VALU是3

這裏多是實現這個轉型:

<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:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="num[not(. mod 3) = 0]"/> 
</xsl:stylesheet> 
+0

謝謝你的答案!我怎樣才能動態地配置我的轉換,在javascript中,例如傳遞變量到這個變換?再次感謝你 – jose

+0

@jose:將參數傳遞給一個轉換是依賴於實現的,並且必須閱讀描述如何爲所使用的特定XSLT處理器執行此操作的文檔,這與MSXML4和XslCompiledTransform不同,並且... –

1

如果你想處理XML文檔並返回另一個XML文檔,XSLT方法可能是最好的。

如果您只想從XML中提取幾個節點並顯示它們,則內置的javascript功能應該足夠了。

var title = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue; 

var lang = xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");