2010-07-31 79 views
2

我這個XML代碼:訪問XML的XSL屬性

<title xml:lang="ar">أربيك</title> 
<title xml:lang="en">English</title> 

我在XSL格式我:

<div class="title"> 
     <xsl:value-of select="root/title"/> 
</div> 

然而,這僅^顯示阿拉伯語標題,而不是英語一個。我試過這個代碼:

<div class="title"> 
     <xsl:attribute name="xml:lang"><xsl:value-of select="root/title"/> </xsl:attribute> 
</div> 

但是,這個^代碼,它根本不顯示標題。顯示英文和阿拉伯文標題的正確方法是什麼?

+2

一個濃縮的,自包含的,可複製和可複製的例子會很好(即,我們複製整個代碼,執行它並查看問題)。 – VolkerK 2010-07-31 19:11:16

+0

好問題(+1)。看到我的答案是一個簡單而完整的解決方案。 – 2010-07-31 21:10:53

+0

我認爲你的第一次嘗試是朝着正確的方向發展。檢查我的答案,看看它是如何正確完成的。 – 2010-08-02 19:29:38

回答

5

以下將工作。

源XML:

$xmlDoc = <<< XML 
<titles> 
    <title xml:lang="ar">أربيك</title> 
    <title xml:lang="en">English</title> 
</titles> 
XML; 

XSL樣式表與模板文件

$xslDoc = <<< XSL 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="/"> 
      <h1>Titles</h1> 
     <xsl:apply-templates/> 
    </xsl:template> 

    <xsl:template match="title"> 
     <div class="{@xml:lang} title"> 
      <xsl:value-of select="."/> 
     </div> 
    </xsl:template> 

</xsl:stylesheet> 
XSL; 

與轉型匹配任何標題節點與PHP:

$xml = new DOMDocument(); 
$xml->loadXML($xmlDoc); 
$xsl = new DOMDocument; 
$xsl->loadXML($xslDoc); 
$proc = new XSLTProcessor; 
$proc->importStyleSheet($xsl); 
echo $proc->transformToXML($xml); 

會給:

<?xml version="1.0"?> 
<h1>Titles</h1> 
    <div class="ar title">أربيك</div> 
    <div class="en title">English</div> 

編輯:修改後的標題模板使用xml:lang屬性作爲類屬性,因此您可以使用CSS對其進行設置。如果您需要更復雜的樣式,請編寫與該屬性相匹配的另一個模板(如Volker所示)。

+0

給出同樣的錯誤警告:XSLTProcessor :: importStylesheet():元素模板只允許作爲樣式表的子元素 – input 2010-07-31 18:57:45

+2

...如果您已複製並粘貼Gordon的示例 - 其中