私がxml.com
抱えている問題を示すために、からサンプルを取得しました。
私はこのXMLを持っています:
<?xml version="1.0"?>
<!--slightly modified source from xml.com -->
<winelist xmlns="urn:somesite:api:base">
<wine grape="Chardonnay">
<winery>Lindeman's</winery>
<product>Bin 65</product>
<year>1998</year>
<prices>
<list>6.99</list>
<discounted>5.99</discounted>
<case>71.50</case>
</prices>
</wine>
<wine grape="Chardonnay">
<winery>Benziger</winery>
<product>Carneros</product>
<year>1997</year>
<prices>
<list>10.99</list>
<discounted>9.50</discounted>
<case>114.00</case>
</prices>
</wine>
<wine grape="Cabernet">
<winery>Duckpond</winery>
<product>Merit Selection</product>
<year>1996</year>
<prices>
<list>13.99</list>
<discounted>11.99</discounted>
<case>143.50</case>
</prices>
</wine>
<wine grape="Chardonnay">
<winery>Kendall Jackson</winery>
<product>Vintner's Reserve</product>
<year>1998</year>
<prices>
<list>12.50</list>
<discounted>9.99</discounted>
<case>115.00</case>
</prices>
</wine>
</winelist>
そして、この XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="winelist">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort data-type="number" select="prices/discounted"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
割引価格で要素を並べ替えようとしてwine
いますが、変換された XML は、最初にワインリストから名前空間を削除しない限り (つまり、<winelist>
.
手作業による名前空間の削除を適用する必要がないように、XSLT をどのように変更できますか?
また、変換された XML のワイン エンティティには、元のgrape
属性がありません。これらはどのように保存できますか?コメントも同様です (ただし、それほど重要ではありません)。
最初に別の変換を使用してすべての名前空間を削除することもできますが、この 2 段階の解決策はあまり好きではなく、他の XML ソースの問題の原因になる可能性があると思います。
誰かがここで私を助けることができますか?