XSLT 1.0 を使用して、子要素名に基づいて XML 要素をフラット化しようとしています。
ソース XML:
<Contact>
<ContactPurpose>
<PurposeAsPlainText xmlns="cds_dt">Call</PurposeAsPlainText>
</ContactPurpose>
<ContactPurpose>
<PurposeAsEnum xmlns="cds_dt">Call</PurposeAsEnum>
</ContactPurpose>
</Contact>
次の XML に変換する必要があります。
<Contact>
<ContactPurpose>O</ContactPurpose>
<ContactPurpose>Call</ContactPurpose>
</Contact>
ロジックは次のとおりです。
IF 子要素名が「PurposeAsPlainText」 THEN 送信先の Other に「O」を設定
ELSEIF 子要素名は「PurposeAsEnum」 THEN ソース値を宛先にコピー
編集 1 : 解決策のいずれも xml を平坦化していないため、より明確にすることができます。改訂されたソースと宛先の XML を参照してください。
EDIT 2 : これは、私がテストしていた XML です。以下の 2 つの変換ソリューションは、元の xml では実際に機能しますが、.NET 4.0 XslCompiledTransform を使用してテストしていた修正された xml では機能しません。または、新しい質問を作成する必要がありますか?
<MyDS xmlns="cds" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PatientRecord>
<Demographics>
<Contact>
<ContactPurpose>
<PurposeAsPlainText xmlns="cds_dt">Call</PurposeAsPlainText>
</ContactPurpose>
<ContactPurpose>
<PurposeAsEnum xmlns="cds_dt">Call</PurposeAsEnum>
</ContactPurpose>
</Contact>
</Demographics>
</PatientRecord>
</MyDS>