2013-09-05 129 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