XSL更多模板

时间:2014-06-26 08:19:33

标签: c# xml xslt

我有源XML文件和XSL代码,我编辑输出XML文件。 我有这个源xml文件:

<root>
<Firma KOD_FIRMY="Tomášov" STREDISKO="" ICO="666666" DIC="CZ66666   " NAZEV="Rest" JMENO="" MESTO="ZL" ULICE="Uomlom" PSC="76007">
  <faktura KOD_ODBERATEL="Tomášov" DATUM_PORIZENI="2014-06-12" CAS_PORIZENI="15:34:29" DATUM_VYSTAVENI="2014-06-12" DATUM_ZDANITELNEHO_PLNENI="2014-06-12" DATUM_SPLATNOSTI="2014-06-26" CENA_CENIK="2310.72" MNOZSTVI="24.000">
    <dane DPH="21.00" SKLAD_CENA="968.365" />
    <dane DPH="0.00"  SKLAD_CENA="0.000" />
  </faktura>
</Firma>
</root>

这是我的XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">                      
<xsl:output method="xml" encoding="windows-1250" indent="no"/>

<xsl:template match="root/Firma">
<MoneyData> 
    <xsl:apply-templates select="@NAZEV|faktura/@DATUM_PORIZENI|faktura/@DATUM_SPLATNOSTI|faktura/@DATUM_ZDANITELNEHO_PLNENI|faktura/@CAS_PORIZENI"/>
</MoneyData>                         
</xsl:template>     
<xsl:template match="Firma/@NAZEV">
  <xsl:attribute name="KodAgendy"><xsl:value-of select="."/></xsl:attribute>   
</xsl:template>    
<xsl:template match="Firma/faktura/@DATUM_PORIZENI">
  <xsl:attribute name="HospRokOd"><xsl:value-of select="."/></xsl:attribute>   
</xsl:template>    
<xsl:template match="Firma/faktura/@DATUM_SPLATNOSTI">
  <xsl:attribute name="HospRokDo"><xsl:value-of select="."/></xsl:attribute>   
</xsl:template>    
<xsl:template>
  <xsl:attribute name="description">faktury přijaté a vydané</xsl:attribute>   
</xsl:template>    
<xsl:template>
  <xsl:attribute name="ExpZkratka">_FP+FV</xsl:attribute>   
</xsl:template>    
<xsl:template match="Firma/faktura/@DATUM_ZDANITELNEHO_PLNENI">
  <xsl:attribute name="ExpDate"><xsl:value-of select="."/></xsl:attribute>   
</xsl:template>    
<xsl:template match="Firma/faktura/@CAS_PORIZENI">
  <xsl:attribute name="ExpTime"><xsl:value-of select="."/></xsl:attribute>   
</xsl:template>    
<xsl:template>
  <xsl:attribute name="VyberZaznamu">0</xsl:attribute>   
</xsl:template>    
<xsl:template match="/">
    <xsl:for-each select="root/Firma">  
        <SeznamFaktVyd>
          <FaktVyd>
            <Doklad><xsl:value-of select="faktura/dane/@SKLAD_CENA"/></Doklad>
          </FaktVyd>
        </SeznamFaktVyd>
    </xsl:for-each> 
</xsl:template>    
</xsl:stylesheet>

这是我输出的例子:

<SeznamFaktVyd>
  <FaktVyd>
    <Doklad>968.365</Doklad>
  </FaktVyd>
</SeznamFaktVyd>

但我需要这个输出:

<?xml version="1.0" encoding="windows-1250"?>
<MoneyData KodAgendy="somedata" HospRokOd="somedata" HospRokDo="somedata" description="faktury přijaté a vydané" ExpZkratka="_FP+FV" ExpDate="somedata" ExpTime="somedata" VyberZaznamu="0">
  <SeznamFaktVyd>
    <FaktVyd>
      <Doklad>968.365</Doklad>
      <Doklad>0.000</Doklad>
    </FaktVyd>
  </SeznamFaktVyd>
</MoneyData>

你有什么想法,我怎么能这样做?感谢

1 个答案:

答案 0 :(得分:0)

一个简单的怎么样?

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">                      
<xsl:output method="xml" version="1.0" encoding="windows-1250" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="Firma">
    <MoneyData 
        KodAgendy="{@NAZEV}" 
        HospRokOd="{faktura/@DATUM_PORIZENI}" 
        HospRokDo="{faktura/@DATUM_SPLATNOSTI}" 
        description="faktury přijaté a vydané" 
        ExpZkratka="_FP+FV" 
        ExpDate="{faktura/@DATUM_ZDANITELNEHO_PLNENI}" 
        ExpTime="{faktura/@CAS_PORIZENI}" 
        VyberZaznamu="0">
        <SeznamFaktVyd>
            <FaktVyd>
                <xsl:for-each select="faktura/dane">
                    <Doklad><xsl:value-of select="@SKLAD_CENA"/></Doklad>
                </xsl:for-each>
            </FaktVyd>
        </SeznamFaktVyd>
    </MoneyData>
</xsl:template>   

</xsl:stylesheet>

请注意输出:

<?xml version="1.0" encoding="windows-1250"?>
<MoneyData KodAgendy="Rest" HospRokOd="2014-06-12" HospRokDo="2014-06-26" description="faktury přijaté a vydané" ExpZkratka="_FP+FV" ExpDate="2014-06-12" ExpTime="15:34:29" VyberZaznamu="0">
   <SeznamFaktVyd>
      <FaktVyd>
         <Doklad>968.365</Doklad>
         <Doklad>0.000</Doklad>
      </FaktVyd>
   </SeznamFaktVyd>
</MoneyData>

与您请求的输出不同:它包含源文档中的实际值,而不是“somedata”。 ; - )