2013-09-05 59 views
0

我有一個看起來像這樣的XML:打印XML標記以xsl屬性

<?xml version="1.0" encoding="UTF-8"?> 
<menu> 
    <pizzas attribute="CAT"> 
     <pizza> 
      <name>Tomato &amp; Cheese</name> 
      <small>5.50</small> 
      <large>9.75</large> 
     </pizza> 
    </pizzas> 
</menu> 

我想打印出的比薩餅元素屬性,我用:

<xsl:value-of select="/menu/pizzas/@attribute"/> 

但它沒有打印任何東西

+0

沒有什麼明顯錯誤的存在(除了你缺少收盤''這我相信是一個複製/粘貼問題) – freefaller

+0

請注意,因爲我的評論,彼得還添加結束標記 - 我個人不同意在沒有OP的批准的情況下編輯代碼或數據,因爲這可能會掩蓋實際的問題並將人們帶上瘋狂的追逐。 – freefaller

回答

0

您的XML無效 - 缺少結束標記pizzasmenu。小心複製和粘貼! 如果你有這樣的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<menu> 
    <pizzas attribute="CAT"> 
    <pizza> 
     <name>Tomato &amp; Cheese</name> 
     <small>5.50</small> 
     <large>9.75</large> 
    </pizza> 
    </pizzas> 
</menu> 

,並在應用此XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 

<xsl:template match="/"> 
<output> 
    <xsl:value-of select="/menu/pizzas/@attribute"/> 
</output> 
</xsl:template> 

</xsl:stylesheet> 

你會得到這樣的輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<output>CAT</output> 

最佳regarsd, 彼得

+0

不好意思,但是我必須把'xsl:stylesheet'和'xsl:template'設置爲'xsl:value-of'的作用嗎? –

+0

是的,否則它不是一個合適的XSLT文件 – Peter

+0

技術上你可以說'< xsl:value-of select =「/ menu/pizzas/@ attribute」/>'這將是一個有效的XSLT文件([XSLT 1.0 spec§2.3](http://www.w3.org/TR/xslt #result-element-stylesheet)),但這在現實生活中很少適用,因爲你不能使用諸如''或'' –

2

我米建立在彼得的答案,以解決其中的一個意見事實上不正確。你問你是否使用說明和彼得說「是」,但事實上,這是不正確的。

用彼得的輸入文件:

<?xml version="1.0" encoding="UTF-8"?> 
<menu> 
    <pizzas attribute="CAT"> 
    <pizza> 
     <name>Tomato &amp; Cheese</name> 
     <small>5.50</small> 
     <large>9.75</large> 
    </pizza> 
    </pizzas> 
</menu> 

會得到以下的結果,這是一樣的彼得:

<?xml version="1.0" encoding="utf-8"?><output>CAT</output> 

當你使用這個XSLT樣式表:

<output xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xsl:version="1.0"> 
    <xsl:value-of select="/menu/pizzas/@attribute"/> 
</output> 

這種樣式表寫法被稱爲「簡化」樣式表。下面是一個使用撒克遜在DOS提示符下運行上面的成績單:

t:\ftemp>type pizza.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<menu> 
    <pizzas attribute="CAT"> 
    <pizza> 
     <name>Tomato &amp; Cheese</name> 
     <small>5.50</small> 
     <large>9.75</large> 
    </pizza> 
    </pizzas> 
</menu> 

t:\ftemp>call xslt pizza.xml pizza.xsl 
<?xml version="1.0" encoding="utf-8"?><output>CAT</output> 
t:\ftemp>type pizza.xsl 
<output xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xsl:version="1.0"> 
    <xsl:value-of select="/menu/pizzas/@attribute"/> 
</output> 

t:\ftemp>rem Done! 

所以,其實,你並不需要你有簡單要求<xsl:stylesheet><xsl:template>

+0

@Ken的東西:謝謝你的解釋。我沒有意識到這一點。 +1 – Peter