私は最終的に次のように自分の質問を解決しました。
入力メッセージを通常の XML ドキュメントに変換するために、次の XSL スタイルシートを開発しました。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var s0 ScriptNS0" version="1.0" xmlns:s0="http://abcd.whatever.net/abcd/1.0.1" xmlns:ScriptNS0="http://schemas.microsoft.com/BizTalk/2003/ScriptNS0" xmlns:info="http://info.sumthin.net/1.0.0" xmlns:wxyz="http://wxyz.widgetwonks.net/wxyz/3.0.3">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<Message>
<xsl:apply-templates />
</Message>
</xsl:template>
<!-- <xsl:template match="/s0:Message" /> -->
<xsl:template match="info:CaveatText">
<xsl:element name="TextField">
<xsl:text> </xsl:text>
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:element>
</xsl:template>
<xsl:template match="wxyz:PersonSSNID/wxyz:ID">
<xsl:element name="TextField">
<xsl:text> SSN: </xsl:text>
<xsl:value-of select="substring(., 0, 4)"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="substring(., 4, 2)"/>
<xsl:text>-</xsl:text>
<xsl:value-of select="substring(., 6, 4)"/>
<xsl:text>
</xsl:text>
</xsl:element>
</xsl:template>
<xsl:template match="*">
<xsl:if test="string-length(normalize-space(text()))=0">
<xsl:element name="TextField">
<xsl:text>
</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>
</xsl:text>
</xsl:element>
</xsl:if>
<xsl:if test="not(string-length(normalize-space(text()))=0)">
<xsl:element name="TextField">
<xsl:text> </xsl:text>
<xsl:value-of select="local-name()"/>: <xsl:value-of select="normalize-space(text())"/>
</xsl:element>
</xsl:if>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()|@*">
<xsl:if test="string-length(normalize-space(.)) != 0">
<xsl:element name="TextField">
<xsl:text>
</xsl:text>
</xsl:element>
</xsl:if>
</xsl:template>
スタイルシートによって作成されたサンプル XML ドキュメントは、テキスト エディターで次のように表示されます。
<Message xmlns:{namespaces galore...}><TextField>
Message
</TextField><TextField>
HeaderArea
</TextField><TextField> KeyText: PQ</TextField><TextField>
</TextField><TextField> HeaderText: XYXY1010Z</TextField><TextField>
</TextField><TextField>
ResponseDataSection
</TextField><TextField> **TEST**THIS RESPONSE IS FROM ABCD TEST SYSTEM.
</TextField><TextField>
PersonName
</TextField><TextField> PersonGivenName: JACK</TextField><TextField>
</TextField><TextField> PersonMiddleName: DANIEL</TextField><TextField>
</TextField><TextField> PersonSurName: WEBBER</TextField><TextField>
</TextField><TextField> PersonBirthDateText: 1975-01-31</TextField><TextField>
</TextField><TextField>
PersonAssignedIDDetails
</TextField><TextField>
PersonSSNID
</TextField><TextField> SSN: 123-98-7654
</TextField><TextField>
PersonOtherID
</TextField><TextField> ID: XT-01020304050</TextField><TextField>
</TextField><TextField>
PersonPhysicalDetails
</TextField><TextField> PersonSexCode: M</TextField><TextField>
</TextField><TextField> PersonRaceCode: W</TextField><TextField>
</TextField><TextField>
PersonAbcdID
</TextField><TextField> ID: Z123456789</TextField><TextField>
</TextField><TextField> ExpandedBirthDateSearch: 1</TextField><TextField>
</TextField><TextField> ExpandedNameSearchIndicator: false</TextField><TextField>
</TextField><TextField>
VehicleID
</TextField><TextField> ID: ASDFASDFASDFASDFA</TextField><TextField>
</TextField><TextField> VehicleMakeText: DODG</TextField><TextField>
</TextField><TextField>
VehicleRegistrationPlateID
</TextField><TextField> ID: ABC123</TextField><TextField>
</TextField><TextField> IDJurisdictionText: AZ</TextField><TextField>
</TextField><TextField>
PrimaryResponse
</TextField><TextField>
PersonAlias
</TextField><TextField>
PersonAlternateName
</TextField><TextField> PersonGivenName: JACK</TextField><TextField>
</TextField><TextField> PersonMiddleName: ALLEN</TextField><TextField>
</TextField><TextField> PersonSurName: DANIEL</TextField><TextField>
</TextField><TextField>
PersonAlternateName
</TextField><TextField> PersonGivenName: JACKIE</TextField><TextField>
</TextField><TextField> PersonSurName: DANIEL</TextField><TextField>
</TextField><TextField>
PersonAlternateName
</TextField><TextField> PersonGivenName: JD</TextField><TextField>
</TextField><TextField> PersonSurName: DANIEL</TextField><TextField>
</TextField><TextField> PersonBirthDateText: 1967-01-01</TextField><TextField>
</TextField><TextField> PersonBirthDateText: 1968-01-01</TextField><TextField>
</TextField><TextField>
PersonAssignedIDDetails
</TextField><TextField>
PersonSSNID
</TextField><TextField> SSN: 234-00-0001
</TextField><TextField>
PersonSSNID
</TextField><TextField> SSN: 345-00-0002
</TextField><TextField>
PersonSSNID
</TextField><TextField> SSN: 456-00-0003
</TextField><TextField>
PersonSSNID
</TextField><TextField> SSN: 567-00-0004
</TextField><TextField>
PersonOtherID
</TextField><TextField> ID: XZ1234DE</TextField><TextField>
</TextField><TextField>
PersonOtherID
</TextField><TextField> ID: YZE6241</TextField><TextField>
</TextField><TextField>
</Message>
上記の (...break to next line...) シーケンスは、スタイルシートの部分によって生成された CR/LF です。
上記のメッセージのスキーマは単純です。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:xsi={application-specific namespace} xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:annotation>
<xs:appinfo>
<schemaEditorExtension:schemaInfo namespaceAlias="b" extensionClass="Microsoft.BizTalk.FlatFileExtension.FlatFileExtension" standardName="Flat File" xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" />
<b:schemaInfo root_reference="Message" default_pad_char=" " pad_char_type="char" count_positions_by_byte="false" parser_optimization="speed" lookahead_depth="3" suppress_empty_nodes="false" generate_empty_nodes="true" allow_early_termination="false" early_terminate_optional_fields="false" allow_message_breakup_of_infix_root="false" compile_parse_tables="false" standard="Flat File" />
</xs:appinfo>
</xs:annotation>
<xs:element name="Message">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" sequence_number="1" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:annotation>
<xs:appinfo>
<b:groupInfo sequence_number="0" />
</xs:appinfo>
</xs:annotation>
<xs:element maxOccurs="unbounded" name="TextField" type="xs:string">
<xs:annotation>
<xs:appinfo>
<b:fieldInfo sequence_number="1" justification="left" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Visual Studio のスキーマ エディター ツリーは、スキーマが実際にいかに単純であるかを示しています。
<Schema> (Schema Editor Extensions is set to Flat File Extension)
Message (a record with no default properties)
TextString (a child element defined as unbounded)
BizTalk マッピング: 1. カスタム XSLT ファイルを使用して、上記のターゲット スキーマを使用してメッセージを生成するため、マップ上に Functoid はありません。2. Validate Map を使用して、カスタム拡張 XML ファイルを生成しました。3. カスタム拡張 XML とスタイルシート ファイルをプロジェクトに追加しました。4. マップ デザイン サーフェイスで、上記のファイルに移動して、カスタム拡張 XML およびカスタム XSL パス プロパティを設定します。
ターゲット スキーマを使用して、フラット ファイル アセンブラーを含む BizTalk パイプラインを作成しました。
ソリューションをデプロイしました。
新しい送信パイプラインを使用するように送信ポートを構成しました。
最終的な出力は、次のようなフラット ファイルです。
Message
HeaderArea
TransactionKeyText: PQ
TransactionHeaderText: XYXY1010Z
ResponseDataSection
**TEST**THIS RESPONSE IS FROM ABCD TEST SYSTEM.
PersonName
PersonGivenName: JACK
PersonMiddleName: DANIEL
PersonSurName: WEBBER
PersonBirthDateText: 1975-01-31
PersonAssignedIDDetails
PersonSSNID
SSN: 123-98-7654
PersonOtherID
ID: XT-01020304050
PersonPhysicalDetails
PersonSexCode: M
PersonRaceCode: W
PersonAbcdID
ID: Z123456789
ExpandedBirthDateSearch: 1
ExpandedNameSearchIndicator: false
VehicleID
ID: ASDFASDFASDFASDFA
VehicleMakeText: DODG
VehicleRegistrationPlateID
ID: ABC123
IDJurisdictionText: AZ
PrimaryResponse
PersonAlias
PersonAlternateName
PersonGivenName: JACK
PersonMiddleName: ALLEN
PersonSurName: DANIEL
PersonAlternateName
PersonGivenName: JACKIE
PersonSurName: DANIEL
PersonAlternateName
PersonGivenName: JD
PersonSurName: DANIEL
PersonBirthDateText: 1967-01-01
PersonBirthDateText: 1968-01-01
PersonAssignedIDDetails
PersonSSNID
SSN: 234-00-0001
PersonSSNID
SSN: 345-00-0002
PersonSSNID
SSN: 456-00-0003
PersonSSNID
SSN: 567-00-0004
PersonOtherID
ID: XZ1234DE
PersonOtherID
ID: YZE6241