我是xsl(t)的新手。
在阅读了相关的一些主题之后,混乱变得越来越大。我必须通过属性转换xml文件的子部分。
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<Rechnung AuftragsReferenz="" MarketingCode="KAN00" Auftragsart="Normal" Auftragsherkunft="Schriftlich" AnzahlPakete="1" ZuZahlenderBetrag="94.30" SummeNebenerloeseNetto="6.07" SummeNebenerloeseBrutto="6.50" EnthalteneMWST="7.86" BetragNetto="86.44" BetragBrutto="94.30" Rechnungsdatum="25.05.2012" Rechnungsnummer="123456789" Zahlungskanal="Rechnung">
<RechnungArtikelpositionen>
<RechnungArtikelposition EinzelPreisNetto="0.00" EinzelPreisBrutto="0.00" GesamtPreisNetto="0.00" GesamtPreisBrutto="0.00" Menge="1.00">
<Rechnungnebenerloese/>
<RechnungMehrwertsteuer Prozentsatz="19.00" Steuerbetrag="2.87" Nettobetrag="15.08"/>
<Artikelposition Absagekennzeichen="Allein im Rückstand" AbsagekennzeichenId="38" Artikeltyp="Geschenk" ArtikeltypId="8" Zusatztextkennzeichen="1" Zusatztext="" Bestellnummer="82000" Bestellmenge="1.00" Artikelbezeichnung="Dankeschön" Katalogkennzeichen="K4"/>
<Ersatzartikel Zusatztextkennzeichen="" Zusatztext="" Bestellnummer="12345" Bestellmenge="1.00" Artikelbezeichnung="Geschenk: EinGeschenk" Katalogkennzeichen="K4"/>
</RechnungArtikelposition>
<RechnungArtikelposition EinzelPreisNetto="15.08" EinzelPreisBrutto="17.95" GesamtPreisNetto="15.08" GesamtPreisBrutto="17.95" Menge="1.00">
<Rechnungnebenerloese/>
<RechnungMehrwertsteuer Prozentsatz="19.00" Steuerbetrag="2.87" Nettobetrag="15.08"/>
<Artikelposition Absagekennzeichen="Keine Absage" AbsagekennzeichenId="1" Artikeltyp="Verkauf" ArtikeltypId="0" Zusatztextkennzeichen="1" Zusatztext="" Bestellnummer="54321" Bestellmenge="1.00" Artikelbezeichnung="Massageöl Latschenkiefer" Katalogkennzeichen="K4"/>
<Ersatzartikel/>
</RechnungArtikelposition>
<RechnungArtikelposition EinzelPreisNetto="27.99" EinzelPreisBrutto="29.95" GesamtPreisNetto="27.99" GesamtPreisBrutto="29.95" Menge="1.00">
<Rechnungnebenerloese/>
<RechnungMehrwertsteuer Prozentsatz="7.00" Steuerbetrag="4.99" Nettobetrag="71.36"/>
<Artikelposition Absagekennzeichen="Keine Absage" AbsagekennzeichenId="1" Artikeltyp="Verkauf" ArtikeltypId="0" Zusatztextkennzeichen="" Zusatztext="" Bestellnummer="44444" Bestellmenge="1.00" Artikelbezeichnung="Knoblauchkapseln 60 Stück +" Katalogkennzeichen="K4"/>
<Ersatzartikel/>
</RechnungArtikelposition>
<RechnungArtikelposition EinzelPreisNetto="18.64" EinzelPreisBrutto="19.95" GesamtPreisNetto="37.28" GesamtPreisBrutto="39.90" Menge="2.00">
<Rechnungnebenerloese/>
<RechnungMehrwertsteuer Prozentsatz="7.00" Steuerbetrag="4.99" Nettobetrag="71.36"/>
<Artikelposition Absagekennzeichen="Keine Absage" AbsagekennzeichenId="1" Artikeltyp="Verkauf" ArtikeltypId="0" Zusatztextkennzeichen="" Zusatztext="" Bestellnummer="55555" Bestellmenge="2.00" Artikelbezeichnung="Echte Sauerampfer Kapseln 60 St.+" Katalogkennzeichen="K4"/>
<Ersatzartikel/>
</RechnungArtikelposition>
</RechnungArtikelpositionen>
<other things />
</Rechnung>
“Artikelposition”应按“EinzelPreisBrutto”排序
我尝试了几种变体,最新的是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:copy-of select="Rechnung">
<xsl:copy-of select="RechnungArtikelpositionen" />
<xsl:apply-templates select="RechnungArtikelposition">
<xsl:sort select="@EinzelPreisBrutto" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:copy-of>
</xsl:template>
</xsl:stylesheet>
但不进行排序。我究竟做错了什么?感谢您的帮助。
答案 0 :(得分:0)
您的XSLT实际上当前无效 xsl:copy-of 函数不应包含其中的任何元素(它仅用于按原样复制元素
此外,您需要确保在应用 RechnungArtikelposition 的模板时,您位于 RechnungArtikelpositionen 的正确父元素上。在您的代码示例中,当前位置将是XML的文档元素。
不要使用xsl:copy-of,而是尝试使用带有额外模板的身份模板来匹配 RechnungArtikelpositionen ,然后对子项进行排序。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="RechnungArtikelpositionen">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="RechnungArtikelposition">
<xsl:sort select="@EinzelPreisBrutto" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当应用于您的示例XML时,输出以下内容:
<Rechnung AuftragsReferenz="" MarketingCode="KAN00" Auftragsart="Normal" Auftragsherkunft="Schriftlich" AnzahlPakete="1" ZuZahlenderBetrag="94.30" SummeNebenerloeseNetto="6.07" SummeNebenerloeseBrutto="6.50" EnthalteneMWST="7.86" BetragNetto="86.44" BetragBrutto="94.30" Rechnungsdatum="25.05.2012" Rechnungsnummer="123456789" Zahlungskanal="Rechnung">
<RechnungArtikelpositionen>
<RechnungArtikelposition EinzelPreisNetto="27.99" EinzelPreisBrutto="29.95" GesamtPreisNetto="27.99" GesamtPreisBrutto="29.95" Menge="1.00">
<Rechnungnebenerloese/>
<RechnungMehrwertsteuer Prozentsatz="7.00" Steuerbetrag="4.99" Nettobetrag="71.36"/>
<Artikelposition Absagekennzeichen="Keine Absage" AbsagekennzeichenId="1" Artikeltyp="Verkauf" ArtikeltypId="0" Zusatztextkennzeichen="" Zusatztext="" Bestellnummer="44444" Bestellmenge="1.00" Artikelbezeichnung="Knoblauchkapseln 60 Stück +" Katalogkennzeichen="K4"/>
<Ersatzartikel/>
</RechnungArtikelposition>
<RechnungArtikelposition EinzelPreisNetto="18.64" EinzelPreisBrutto="19.95" GesamtPreisNetto="37.28" GesamtPreisBrutto="39.90" Menge="2.00">
<Rechnungnebenerloese/>
<RechnungMehrwertsteuer Prozentsatz="7.00" Steuerbetrag="4.99" Nettobetrag="71.36"/>
<Artikelposition Absagekennzeichen="Keine Absage" AbsagekennzeichenId="1" Artikeltyp="Verkauf" ArtikeltypId="0" Zusatztextkennzeichen="" Zusatztext="" Bestellnummer="55555" Bestellmenge="2.00" Artikelbezeichnung="Echte Sauerampfer Kapseln 60 St.+" Katalogkennzeichen="K4"/>
<Ersatzartikel/>
</RechnungArtikelposition>
<RechnungArtikelposition EinzelPreisNetto="15.08" EinzelPreisBrutto="17.95" GesamtPreisNetto="15.08" GesamtPreisBrutto="17.95" Menge="1.00">
<Rechnungnebenerloese/>
<RechnungMehrwertsteuer Prozentsatz="19.00" Steuerbetrag="2.87" Nettobetrag="15.08"/>
<Artikelposition Absagekennzeichen="Keine Absage" AbsagekennzeichenId="1" Artikeltyp="Verkauf" ArtikeltypId="0" Zusatztextkennzeichen="1" Zusatztext="" Bestellnummer="54321" Bestellmenge="1.00" Artikelbezeichnung="Massageöl Latschenkiefer" Katalogkennzeichen="K4"/>
<Ersatzartikel/>
</RechnungArtikelposition>
<RechnungArtikelposition EinzelPreisNetto="0.00" EinzelPreisBrutto="0.00" GesamtPreisNetto="0.00" GesamtPreisBrutto="0.00" Menge="1.00">
<Rechnungnebenerloese/>
<RechnungMehrwertsteuer Prozentsatz="19.00" Steuerbetrag="2.87" Nettobetrag="15.08"/>
<Artikelposition Absagekennzeichen="Allein im Rückstand" AbsagekennzeichenId="38" Artikeltyp="Geschenk" ArtikeltypId="8" Zusatztextkennzeichen="1" Zusatztext="" Bestellnummer="82000" Bestellmenge="1.00" Artikelbezeichnung="Dankeschön" Katalogkennzeichen="K4"/>
<Ersatzartikel Zusatztextkennzeichen="" Zusatztext="" Bestellnummer="12345" Bestellmenge="1.00" Artikelbezeichnung="Geschenk: EinGeschenk" Katalogkennzeichen="K4"/>
</RechnungArtikelposition>
</RechnungArtikelpositionen>
<otherthings/>
</Rechnung>