2012-11-14 53 views
0

我有一個XML文件和XSLT文件,如下如何使用XSLT

Check.xml

<catalog> 
    <cd> 
     <title>Empire Burlesque</title> 
     <artist>Bob Dylan</artist> 
     <country>USA</country> 
     <company>Columbia</company> 
     <price>10.90</price> 
     <year>1985</year> 
    </cd> 
    <cd> 
     <title>Hide your heart</title> 
     <artist>Bonnie Tyler</artist> 
     <country>UK</country> 
     <company>CBS Records</company> 
     <price>9.90</price> 
     <year>1988</year> 
    </cd> 
</catalog> 

Check.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" encoding="utf-8" indent="no"/> 
<xsl:for-each select="/"> 
<xsl:choose> 
     <xsl:when test="country='USA'"> 
     <xsl:copy-of select="CHK"/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:copy-of select="*"/> 
     </xsl:otherwise> 
     </xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 

,以取代在XML文件中的文本。當我嘗試轉換它我得到以下錯誤

Error:XSLTProcessor::transformToXml() [<a href='xsltprocessor.transformtoxml'>xsltprocessor.transformtoxml</a>]: No stylesheet associated to this object 

Iam試圖在這裏執行的是檢查值是否爲「USA」,如果是,則用「CHK」字符串替換USA。

Iam沒有得到我要去的地方,或者Iam沒有使用正確的語法。 我是XSLT的新手,剛開始使用它。任何幫助是極大的讚賞!!! 我期待的輸出是

<catalog> 
     <cd> 
      <title>Empire Burlesque</title> 
      <artist>Bob Dylan</artist> 
      <country>**CHK**</country> 
      <company>Columbia</company> 
      <price>10.90</price> 
      <year>1985</year> 
     </cd> 
     <cd> 
      <title>Hide your heart</title> 
      <artist>Bonnie Tyler</artist> 
      <country>UK</country> 
      <company>CBS Records</company> 
      <price>9.90</price> 
      <year>1988</year> 
     </cd> 
</catalog> 
+0

XML中沒有''元素。請更新您的問題,並舉例說明您希望輸出XML的樣子。 – ABach

回答

2

當這個XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <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="country[. = 'USA']"> 
    <country>**CHK**</country> 
    </xsl:template> 

</xsl:stylesheet> 

......被應用於提供的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Edited by XMLSpy® --> 
<catalog> 
    <cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>USA</country> 
    <company>Columbia</company> 
    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
    <cd> 
    <title>Hide your heart</title> 
    <artist>Bonnie Tyler</artist> 
    <country>UK</country> 
    <company>CBS Records</company> 
    <price>9.90</price> 
    <year>1988</year> 
    </cd> 
</catalog> 

......產生期望的輸出:

<catalog> 
    <cd> 
    <title>Empire Burlesque</title> 
    <artist>Bob Dylan</artist> 
    <country>**CHK**</country> 
    <company>Columbia</company> 
    <price>10.90</price> 
    <year>1985</year> 
    </cd> 
    <cd> 
    <title>Hide your heart</title> 
    <artist>Bonnie Tyler</artist> 
    <country>UK</country> 
    <company>CBS Records</company> 
    <price>9.90</price> 
    <year>1988</year> 
    </cd> 
</catalog> 

說明:

  • 第一個模板是Identity Transform - 它的工作是輸出的所有節點,並從源文件的屬性到結果文檔原樣。
  • 第二個模板通過匹配任何值爲「USA」的<country>元素來覆蓋Identity變換。在這種情況下,將創建一個新的<country>元素並給出所需的值。

我建議你看看this link瞭解一些很棒的XSLT學習資源。

+0

謝謝,但我仍然得到上面粘貼相同的錯誤。請幫忙:(這是我檢查它的鏈接http://xslt.online-toolz.com/tools/xslt-transformation.php – Galaxin

+0

不知道該怎麼告訴你,因爲我沒有創建在線工具現在,我只是在那裏測試了我的解決方案,並得到了正確的結果。接下來,我建議您在自己的機器上安裝一個合理的XSLT解析器 - 從這裏開始:http://www.sagehill.net/ docbookxsl/InstallingAProcessor.html – ABach

+0

它的工作!!!謝謝:)不知道早些時候什麼哇問題.. – Galaxin