私は他の誰かのためにこれを解決しようとしていますが、自分で問題に遭遇しました。
私はXMLを持っています:
<Process>
<name>Pro1</name>
<duration>Dur1</duration>
<time>Time1</time>
<name>Pro2</name>
<duration>Dur2</duration>
<time>Time2</time>
<name>Pro3</name>
<duration>Dur3</duration>
<time>Time3</time>
<name>Pro4</name>
<duration>Dur4</duration>
<time>Time4</time>
<name>Pro5</name>
<duration>Dur5</duration>
<time>Time5</time>
</Process>
出力:
<Process>
<Process_Info>
<name>Pro1</name>
<duration>Dur1</duration>
<time>Time1</time>
</Process_Info>
<Process_Info>
<name>Pro2</name>
<duration>Dur2</duration>
<time>Time2</time>
</Process_Info>
<Process_Info>
<name>Pro3</name>
<duration>Dur3</duration>
<time>Time3</time>
</Process_Info>
<Process_Info>
<name>Pro4</name>
<duration>Dur4</duration>
<time>Time4</time>
</Process_Info>
<Process_Info>
<name>Pro5</name>
<duration>Dur5</duration>
<time>Time5</time>
</Process_Info>
</Process>
XSLT の使用:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:variable name ="varProcess" select ="Process"/>
<xsl:template match="Process">
<xsl:element name="Process">
<xsl:for-each select ="name">
<xsl:variable name ="posName" select ="position()"/>
<xsl:element name ="Process_Info">
<xsl:copy-of select ="."/>
<xsl:copy-of select="$varProcess/duration[$posName]"/>
<xsl:copy-of select="$varProcess/time[$posName]"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
ただし、<duration>
および<time>
ノードが常に存在するとは限ら<name>
ず、保証されるノードは だけです。したがって、いずれかが欠落している場合、position()
選択は失敗します。
<duration>
and/or<time>
が存在しない場合でも XSLT が機能するように変更するにはどうすればよいですか。
私の理論では、現在の名前ノードの下にある 2 つのノードを選択し、それらがコピーされている<duration>
か、またはコピーされているかということです。<time>
しかし、それがどのように実装されるかはわかりません。
問題を引き起こす電流出力の例。
入力:
<Process>
<name>Pro1</name>
<duration>Dur1</duration>
<time>Time1</time>
<name>Pro2</name>
<duration>Dur2</duration>
<time>Time2</time>
<name>Pro3</name>
<duration>Dur3</duration>
<time>Time3</time>
<name>Pro4</name>
<time>Time4</time>
<name>Pro5</name>
<duration>Dur5</duration>
</Process>
出力:
<Process>
<Process_Info>
<name>Pro1</name>
<duration>Dur1</duration>
<time>Time1</time>
</Process_Info>
<Process_Info>
<name>Pro2</name>
<duration>Dur2</duration>
<time>Time2</time>
</Process_Info>
<Process_Info>
<name>Pro3</name>
<duration>Dur3</duration>
<time>Time3</time>
</Process_Info>
<Process_Info>
<name>Pro4</name>
<duration>Dur5</duration> <!-- Should be in the below process_info -->
<time>Time4</time>
</Process_Info>
<Process_Info>
<name>Pro5</name>
</Process_Info>
</Process>