Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xsl打印xml标记属性_Xml_Xslt - Fatal编程技术网

使用xsl打印xml标记属性

使用xsl打印xml标记属性,xml,xslt,Xml,Xslt,我有一个如下所示的XML: <?xml version="1.0" encoding="UTF-8"?> <menu> <pizzas attribute="CAT"> <pizza> <name>Tomato &amp; Cheese</name> <small>5.50</small> <

我有一个如下所示的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>

番茄酱;奶酪
5.50
9.75
我想打印pizzas元素中的属性,我使用了:

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


但是它不打印任何内容

您的XML无效-缺少
比萨饼
菜单
的结束标记。小心复制和粘贴! 如果您有此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>

番茄酱;奶酪
5.50
9.75
您可以应用以下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>
最佳富豪酒店,
彼得

我以彼得的答案为基础,来回答其中一条事实上不正确的评论。你问你是否必须使用说明书,彼得说“是”,但事实上这是不对的

使用Peter的输入文件:

<?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>

番茄酱;奶酪
5.50
9.75
您将得到以下结果,与Peter的结果相同:

<?xml version="1.0" encoding="utf-8"?><output>CAT</output>
CAT
使用此XSLT样式表时:

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

这种风格的样式表被称为“简化”样式表。下面是使用Saxon在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! 
t:\ftemp>type pizza.xml
番茄酱;奶酪
5.50
9.75
t:\ftemp>调用xslt pizza.xml pizza.xsl
猫
t:\ftemp>type pizza.xsl
t:\ftemp>rem完成!

因此,事实上,您不需要
来满足您的简单需求。

这里没有明显的错误(除了您缺少结尾
,我认为这是一个复制/粘贴问题),请注意,Peter在我发表评论后添加了结束标记-我个人不同意未经OP批准编辑代码或数据,因为这可能会掩盖一个实际的问题,让人们陷入白费力气。对不起,我必须把
xsl:stylesheet
xsl:template
放在
xsl:value的
,但这在现实生活中很少适用,因为你不能使用像
@Ken:谢谢你的解释。我没有意识到这一点+1.