こんにちはこれはここに投稿された前の質問の適応です。
XSLT-名前IDが一致する最初の前のアイテムから要素値を検索します-条件を使用しますか?
以下のようなXMLがあります。
投稿の下部に理想的なxmlを生成するxsl変換を作成したいと思います。
提示されたXML内で、ファイルIDによって定義されたImageノードが複数回使用されている場合、後続の子の要素は存在しないことに注意してください。たとえば、ファイルIDが最初のイメージノードと同じである3番目のイメージノードには、子プロパティと後続の値が含まれていません。それらを再び追加したいと思います。
以下の現在のサンプルxslは基本的に機能していますが、スタイルシートに次のような条件付き評価を追加したいと思います。英語:「key」要素が存在しない場合は、最初に一致する「fileid」を見つけて使用します。それらの要素からの値。同じことが'string要素と'reel'要素にも当てはまります。(ファイルノード内にポップアップするその他のもの。
結果は、一致するファイルIDの最初のインスタンスに基づいて、空のファイルノードをすべての関連データで埋めます。
説明が不十分であるとお詫びします。
どんな助けでも大歓迎です。
XML:
<?xml version="1.0"?>
<xmeml>
<boxset>
<stream>
<track>
<image>
<start>0</start>
<end>90</end>
<file id="abcde">
<key>95</key>
<string>1023</string>
<time>
<reel>142</reel>
</time>
</file>
</image>
<image>
<start>90</start>
<end>120</end>
<file id="bcdef">
<key>55</key>
<string>1023</string>
<time>
<reel>64</reel>
</time>
</file>
</image>
</track>
<track>
<image>
<start>120</start>
<end>130</end>
<file id="abcde"/>
</image>
<image>
<start>130</start>
<end>180</end>
<file id="cdefg">
<key>92</key>
<string>1023</string>
<time>
<reel>194</reel>
</time>
</file>
</image>
</track>
</stream>
</boxset>
</xmeml>
XSLT:標準のID変換
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- identity Pass everything -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XMLが埋められるとしたら、私が見たいように、次のようになります。
理想的なXML:
<?xml version="1.0"?>
<xmeml>
<boxset>
<stream>
<track>
<image>
<start>0</start>
<end>90</end>
<file id="abcde">
<key>95</key>
<string>1023</string>
<time>
<reel>142</reel>
</time>
</file>
</image>
<image>
<start>90</start>
<end>120</end>
<file id="bcdef">
<key>55</key>
<string>1023</string>
<time>
<reel>64</reel>
</time>
</file>
</image>
</track>
<track>
<image>
<start>120</start>
<end>130</end>
<!-- ideal data for repeated file "abcde" -->
<file id="abcde">
<key>95</key>
<string>1023</string>
<time>
<reel>142</reel>
</time>
</file>
<!-- end ideal repeated data -->
</image>
<image>
<start>130</start>
<end>180</end>
<file id="cdefg">
<key>92</key>
<string>1023</string>
<time>
<reel>194</reel>
</time>
</file>
</image>
</track>
</stream>
</boxset>
</xmeml>