'条件'が空要素を正しく識別していません。目的の出力に 'EMPTYAddress2'属性が表示されます。私はいろいろな「条件」ではなく運を試みました。私は初心者を助けてください。私はOxygen XML Developerを使用していますが、エラーは返されません。条件が空の要素を識別しない場合のXSL
XMLソースファイル:
<InterfaceData>
<OBJECT_ACTION_ID>16283</OBJECT_ACTION_ID>
<Employee>
<Employee>
<EmployeeBasic>
<EmployeeNo>50064</EmployeeNo>
</EmployeeBasic>
<EmployeeBasic_DateMarriageCeased>
<PersonDetailsRecords>
<PersonDetails>
<DateMarriageCeased/>
</PersonDetails>
</PersonDetailsRecords>
</EmployeeBasic_DateMarriageCeased>
<EmployeeAddress>
<AddressRecords>
<AddressDetails>
<Address1>Line1</Address1>
<Address2/>
<Address3>Line3</Address3>
<Address4>Line4</Address4>
<Postcode>Postcode</Postcode>
</AddressDetails>
</AddressRecords>
</EmployeeAddress>
</Employee>
</Employee>
</InterfaceData>
XSLスタイルシート:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<xsl:for-each-group select="//InterfaceData" group-by="OBJECT_ACTION_ID">
<!-- Employee -->
<EmployeeAddress>
<xsl:for-each select="current-group()//AddressDetails">
<xsl:call-template name="CGIderiveAddress">
<xsl:with-param name="myVarAddress1" select="current-group()//Address1/text()"/>
<xsl:with-param name="myVarAddress2" select="current-group()//Address2/text()"/>
<xsl:with-param name="myVarAddress3" select="current-group()//Address3/text()"/>
<xsl:with-param name="myVarAddress4" select="current-group()//Address4/text()"/>
<xsl:with-param name="myVarPostcode" select="current-group()//Postcode/text()"/>
</xsl:call-template>
</xsl:for-each>
</EmployeeAddress>
</xsl:for-each-group>
</xsl:template>
<xsl:template name="CGIderiveAddress">
<xsl:param name="myVarAddress1"/>
<xsl:param name="myVarAddress2"/>
<xsl:param name="myVarAddress3"/>
<xsl:param name="myVarAddress4"/>
<xsl:param name="myVarPostcode"/>
<xsl:attribute name="Address1">
<xsl:value-of select="$myVarAddress1"/>
</xsl:attribute>
<xsl:choose>
<!-- Address Line 2 is empty and Adress Line 3 exists -->
<xsl:when test="$myVarAddress2 = ''">
<xsl:attribute name="EMPTYAddress2">
<xsl:value-of select="'EMPTYAddress2'"/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="NotEMPTYAddress2">
<xsl:value-of select="'NotEMPTYAddress2'"/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
XSL出力:あなたがそうのようなmyVarAddress2
を定義している
<?xml version="1.0" encoding="UTF-8"?>
<EmployeeAddress Address1="Line1"
NotEMPTYAddress2="NotEMPTYAddress2"/>
'for-each-group 'がないときに' current-group() 'を使用することは全く意味がありません。 –
'group-by'や' group-adjacent'や 'group-starting-with' /' ending-with'のない 'for-each-group'は意味がありません。グループ分けが適切でない場合は、最小限の完全なサンプルを作成する時間を取るよりも、問題を再現できるように、入力内容、得られる出力、および望む結果が反映されます。 –
また、ルート要素である 'AddressRecords'に対して' for-each-group'を実行していて、それらのうちの1つだけが存在します。これはグループ化するものではありません。 –