Xslt按节点过滤,按子节点过滤?

时间:2015-05-21 15:32:44

标签: xml xslt

我有一个像这样的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<doc>
<Pizza Id="2" Type="P">
    <Flour Value="type A" Id="17" />
    <Tomato Value="cherry" Id="30" />
    <Cheese Value="swisscheese" Id="30" />
</Pizza>
<Pasta Id="3" Type="P">
    <Wheat Value="buckwheat" Id="16" />
    <Water Value="uuuuuuu" Id="14" />
</Pasta>
<Cake Id="27" Type="CP">
    <Flour Value="type B" Id="12" /> 
    <Chocolate Value="black" Id="28" />
    <Sugar Value="brown" Id="22" />
    <Milk  Value="fatfree" Id="15" />
</Cake>
<Pie Id="4" Type="P">
    <Flour Value="type A" Id="12"  /> 
    <Mushroom Value="xxxx" Id="15" />
</Pie>
<Pie Id="5" Type="X">
    <Steak Value="beef" Id="12"  /> 
    <Mushroom Value="xxxx" Id="15" />
</Pie>
</doc>

我正在寻找一个提供如下输出的转换:       面粉        

           
  • A型用于:         
              
    • 披萨(id =&#34; 2&#34;)
    •             
    • Pie(id =&#34; 4&#34;)
    •         
            
  • B型用于:            
                    
    • Cacke(id =&#34; 27&#34;)
    •            
           
首先,我会选择Type =&#34; P&#34;的节点。或者输入=&#34; CP&#34;这当然很傻      但我不知道如何处理其余的事情! 我已经勾勒出以下样式表,但我不知道是否必须应用分组或迭代子节点。或者,如果我必须直接选择面粉元素并检查父母是否属于Type =&#39; P&#39;或者&#39; CP&#39;并做其余的事情;

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="doc">
    <html>
        <body>
          <xsl:apply-templates/>
        </body>
    </html>
    <xsl:template match="doc/[@Type='P']|doc/[@Type='CP']">
        <xsl:for-each select="*">
            <xsl:if test="Flour">

            </xsl:if> 
        </xsl:for-each>
    </xsl:template>
 </xsl:stylesheet>

0 个答案:

没有答案