簡単なことから始めたのはXSLT noobにとって非常に面倒です。XSLTソート - 属性を持つ親ノード内でxml子ノードをソートする方法
VS2010でデバッグするときに彼らの親ノードに属性を追加した後、私はエラーを受け取り、降順/のchildNodesを並べ替えるしようとしているが、:
<posts>
<year value="2013">
<post postid="10030" postmonth="1">
<othernode></othernode>
<othernode2></othernode2>
</post>
<post postid="10040" postmonth="2">
<othernode></othernode>
<othernode2></othernode2>
</post>
<post postid="10050" postmonth="3">
<othernode></othernode>
<othernode2></othernode2>
</post>
</year>
<year value="2012">
<post postid="10010" postmonth="1">
<othernode></othernode>
<othernode2></othernode2>
</post>
<post postid="10015" postmonth="2">
<othernode></othernode>
<othernode2></othernode2>
</post>
<post postid="10020" postmonth="3">
<othernode></othernode>
<othernode2></othernode2>
</post>
</year>
</posts>
:
"Attribute and namespace nodes cannot be added to the parent element after a text, comment, pi, or sub-element node has already been added."
は、私はこの単純なXMLがあるとし
xmldatasourceにXPATHを渡して、関連する<year>
ノードを取得します。 2013. 次に、<post>
の子ノードをpostidを使用して降順に並べ替える必要があるため、<year value=2013>
の場合は、レンダリング時に最初にpostid = 10050が表示されます。
したがって、明確にするには、ノード<year>
のソートにのみ関心があります。
私は別々のノードにノードを分割する前に(すなわち、XMLがあった/ポスト/ポスト)は、以下のXSLTが働いた:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
<xsl:sort select="@postid" data-type="text" order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
を伴う上記のエラーを実行しているとき今xmldatasourceが空です。昇順で昇順を渡すと、同じXMLが明らかに返されます(変換なし)
質問:親ノードの属性(<year value="">
)に対応するようにXSLTを更新するにはどうすればよいですか?研究を通じて、「要素作成の前に属性作成を追加する必要があります」と答えました。これは、デバッガを見ていると意味があり、子ノードはdescの順に形成されますが、yearタグにはその属性がありません。しかし、私は本当にXSLTについてのヒントはありません。あまりにも複雑すぎるとは見えませんが、言語を知らないだけです。
ご協力いただきありがとうございます。ありがとう
これだけです。それは素晴らしいです。そんなにありがとう! はい私は1年ノードをXSLTに渡すだけです。私は表示したい年/記事を選択します。 新しい構造を見つけて、xsltを読むことを試みます。 – JimXC
この場合、なぜ 'data-type =" text "'を使用するのでしょうか? 'postid'の値の長さが違うと、明らかに間違った結果になります。 –
それは良い点です。 JimXCのオリジナルのXSLTが使用したものであり、彼の質問の焦点ではなく、例のIDが数字であることに気付かなかったので、私はそれを使用しました。 IDが数値であることが保証されている場合は、 'data-type =" numeric "が望ましいでしょう。 – JLRishe