问题描述
我必须进行从Flatfile到xml的转换,但是问题是Flatfile具有多个子节点,并且子节点也具有子节点。记录在文件中多次出现。我已经创建了一个架构,但是它仅处理单个记录。 您能告诉我我应该创建的可以处理多条记录的架构的结构吗?
这是平面文件。
ASN,000589,0000768,HDR,0008289,0040294A,LA,00,1570,21,TM,M,PE,Corporation,120276,052451,05-00289,05-08299,02,B,011,C,BD,8,16570,24,ST,N,GETRO,120246,054551,0000568,8018279,POH,0508289,004024A,1,PPO000199,NP,13615,13563,13414,1351,2584,3598,2900,A200,B200,HN,18552,1270,1206,05451,LNE,0005289,00402929,PPO000099,AP,8719,00704,2536,DW,3870,CC,0930-01,05-08289,13246,05751,00005668,2,PCK,A0722,4786149,100,0005089,PPO0000199,OP,82664,001822,890,HW,3500,0656-01,000052768,4,031992,48005,12,8290,004029A,872087,0000859,5744,367500,CD,098656-02,00005768,3,04022,479782,2872,04023,4797288,ASN,000521288,004679294A,000075667,000788288,004024594A,33758,01,PP,BA,33158,000672767,8056279,000508288,004029294A,PPO000000199,1360415,1350063,1346914,13501,258304,35698,D250,D290,HQ,10352,000052767,0005288,874402,30001281,HA,377500,098630-02,00002767,03134,480075,03114,480076,94985,480579,94995,480080,
这是我创建的架构
<?xml version="1.0" encoding="UTF-16"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://Test.InputSchema" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://Test.InputSchema">
-<xs:annotation>
-<xs:appinfo>
<schemaEditorExtension:schemaInfo xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" standardName="Flat File" extensionClass="Microsoft.Azure.Integration.DesignTools.FlatFileExtension.FlatFileExtension" namespaceAlias="b"/>
<b:schemaInfo root_reference="Root" default_child_order="infix" default_child_delimiter="," child_delimiter_type="char" compile_parse_tables="false" allow_message_breakup_of_infix_root="false" early_terminate_optional_fields="false" allow_early_termination="false" generate_empty_nodes="true" suppress_empty_nodes="false" lookahead_depth="3" parser_optimization="speed" count_positions_by_byte="false" pad_char_type="char" default_pad_char=" " codepage="65001" standard="Flat File"/>
</xs:appinfo>
</xs:annotation>
-<xs:element name="Root">
-<xs:annotation>
-<xs:appinfo>
<b:recordInfo child_delimiter_type="hex" suppress_trailing_delimiters="false" preserve_delimiter_for_empty_data="true" sequence_number="1" child_order="postfix" child_delimiter="0x0D 0x0A" structure="delimited"/>
</xs:appinfo>
</xs:annotation>
-<xs:complexType>
-<xs:sequence>
-<xs:annotation>
-<xs:appinfo>
<b:groupInfo sequence_number="0"/>
</xs:appinfo>
</xs:annotation>
-<xs:sequence maxOccurs="unbounded">
-<xs:annotation>
-<xs:appinfo>
<b:groupInfo sequence_number="1"/>
</xs:appinfo>
</xs:annotation>
-<xs:element name="ASN">
-<xs:annotation>
-<xs:appinfo>
<b:recordInfo child_delimiter_type="default" suppress_trailing_delimiters="false" preserve_delimiter_for_empty_data="true" sequence_number="1" child_order="default" structure="delimited" tag_name="ASN,"/>
</xs:appinfo>
</xs:annotation>
-<xs:complexType>
-<xs:sequence>
-<xs:annotation>
-<xs:appinfo>
<b:groupInfo sequence_number="0"/>
</xs:appinfo>
</xs:annotation>
-<xs:element name="Field" maxOccurs="unbounded" 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:element name="HDR">
-<xs:annotation>
-<xs:appinfo>
<b:recordInfo child_delimiter_type="default" suppress_trailing_delimiters="false" preserve_delimiter_for_empty_data="true" sequence_number="2" child_order="default" structure="delimited" tag_name="HDR,"/>
</xs:appinfo>
</xs:annotation>
-<xs:complexType>
-<xs:sequence>
-<xs:annotation>
-<xs:appinfo>
<b:groupInfo sequence_number="0"/>
</xs:appinfo>
</xs:annotation>
-<xs:element name="Field" maxOccurs="unbounded" 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:element name="POH">
-<xs:annotation>
-<xs:appinfo>
<b:recordInfo child_delimiter_type="default" suppress_trailing_delimiters="false" preserve_delimiter_for_empty_data="true" sequence_number="3" child_order="default" structure="delimited" tag_name="POH,"/>
</xs:appinfo>
</xs:annotation>
-<xs:complexType>
-<xs:sequence>
-<xs:annotation>
-<xs:appinfo>
<b:groupInfo sequence_number="0"/>
</xs:appinfo>
</xs:annotation>
-<xs:element name="Field" maxOccurs="unbounded" 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:sequence maxOccurs="unbounded">
-<xs:annotation>
-<xs:appinfo>
<b:groupInfo sequence_number="4"/>
</xs:appinfo>
</xs:annotation>
-<xs:element name="LNE" maxOccurs="unbounded">
-<xs:annotation>
-<xs:appinfo>
<b:recordInfo child_delimiter_type="default" suppress_trailing_delimiters="false" preserve_delimiter_for_empty_data="true" sequence_number="1" child_order="default" structure="delimited" tag_name="LNE,"/>
</xs:appinfo>
</xs:annotation>
-<xs:complexType>
-<xs:sequence>
-<xs:annotation>
-<xs:appinfo>
<b:groupInfo sequence_number="0"/>
</xs:appinfo>
</xs:annotation>
-<xs:element name="Field" maxOccurs="unbounded" 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:element name="PCK">
-<xs:annotation>
-<xs:appinfo>
<b:recordInfo child_delimiter_type="default" suppress_trailing_delimiters="false" preserve_delimiter_for_empty_data="true" sequence_number="2" child_order="default" structure="delimited" tag_name="PCK,"/>
</xs:appinfo>
</xs:annotation>
-<xs:complexType>
-<xs:sequence>
-<xs:annotation>
-<xs:appinfo>
<b:groupInfo sequence_number="0"/>
</xs:appinfo>
</xs:annotation>
-<xs:element name="Field" maxOccurs="unbounded" 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:sequence>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
解决方法
这里是使用标记标识符和序列组正确解析记录的架构。我尚未定义所有字段,只是在每条记录下放置一个重复字段,您可以将其替换为适当的字段。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Scratch.SO64697726" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Scratch.SO64697726" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:annotation>
<xs:appinfo>
<b:schemaInfo standard="Flat File" root_reference="Root" default_pad_char=" " pad_char_type="char" count_positions_by_byte="false" parser_optimization="complexity" 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" child_delimiter_type="char" default_child_delimiter="," default_child_order="infix" />
<schemaEditorExtension:schemaInfo namespaceAlias="b" extensionClass="Microsoft.BizTalk.FlatFileExtension.FlatFileExtension" standardName="Flat File" xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" />
</xs:appinfo>
</xs:annotation>
<xs:element name="Root">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" sequence_number="1" child_order="postfix" child_delimiter_type="hex" child_delimiter="0x0D 0x0A" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:annotation>
<xs:appinfo>
<b:groupInfo sequence_number="0" />
</xs:appinfo>
</xs:annotation>
<xs:sequence maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<b:groupInfo sequence_number="1" />
</xs:appinfo>
</xs:annotation>
<xs:element maxOccurs="unbounded" name="ASN">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" tag_name="ASN," child_delimiter_type="default" child_order="default" 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="Field" 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:element name="HDR">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" repeating_delimiter_type="char" child_delimiter_type="default" child_order="default" tag_name="HDR," sequence_number="2" />
</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="Field" 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:element name="POH">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" repeating_delimiter_type="char" child_delimiter_type="default" child_order="default" tag_name="POH," sequence_number="3" />
</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="Field" 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:sequence maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<b:groupInfo sequence_number="4" />
</xs:appinfo>
</xs:annotation>
<xs:element maxOccurs="unbounded" name="LNE">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" repeating_delimiter_type="char" child_delimiter_type="default" child_order="default" tag_name="LNE," 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="Field" 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:element maxOccurs="unbounded" name="PCK">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" preserve_delimiter_for_empty_data="true" suppress_trailing_delimiters="false" repeating_delimiter_type="char" child_delimiter_type="default" child_order="default" tag_name="PCK," sequence_number="2" />
</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="Field" 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:sequence>
</xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
输出
<Root xmlns="http://Scratch.SO64697726">
<ASN xmlns="">
<Field>000589</Field>
<Field/>
<Field>0000768</Field>
<Field/>
</ASN>
<HDR xmlns="">
<Field>0008289</Field>
<Field>0040294A</Field>
<Field>LA</Field>
<Field>00</Field>
<Field>1570</Field>
<Field>21</Field>
<Field>TM</Field>
<Field/>
<Field/>
<Field>M</Field>
<Field>PE</Field>
<Field>Corporation</Field>
<Field>120276</Field>
<Field>052451</Field>
<Field>05-00289</Field>
<Field>05-08299</Field>
<Field>02</Field>
<Field>LA</Field>
<Field>B</Field>
<Field>011</Field>
<Field>C</Field>
<Field>BD</Field>
<Field>8</Field>
<Field>LA</Field>
<Field>16570</Field>
<Field>24</Field>
<Field>ST</Field>
<Field/>
<Field>N</Field>
<Field>GETRO</Field>
<Field>GETRO</Field>
<Field>120246</Field>
<Field>054551</Field>
<Field>LA</Field>
<Field>0000568</Field>
<Field>8018279</Field>
<Field/>
</HDR>
<POH xmlns="">
<Field>0508289</Field>
<Field>004024A</Field>
<Field>1</Field>
<Field>PPO000199</Field>
<Field>LA</Field>
<Field>NP</Field>
<Field>00</Field>
<Field>13615</Field>
<Field>13563</Field>
<Field>13414</Field>
<Field>1351</Field>
<Field>2584</Field>
<Field/>
<Field>3598</Field>
<Field>2900</Field>
<Field/>
<Field/>
<Field>A200</Field>
<Field>B200</Field>
<Field>HN</Field>
<Field>18552</Field>
<Field>1270</Field>
<Field/>
<Field>N</Field>
<Field>GETRO</Field>
<Field>GETRO</Field>
<Field>1206</Field>
<Field>05451</Field>
<Field>LA</Field>
<Field>0000768</Field>
<Field/>
</POH>
<LNE xmlns="">
<Field>0005289</Field>
<Field>00402929</Field>
<Field>1</Field>
<Field>1</Field>
<Field>PPO000099</Field>
<Field>AP</Field>
<Field>00</Field>
<Field>8719</Field>
<Field>00704</Field>
<Field>2536</Field>
<Field>DW</Field>
<Field>3870</Field>
<Field>DW</Field>
<Field>CC</Field>
<Field>0930-01</Field>
<Field>05-08289</Field>
<Field/>
<Field>N</Field>
<Field>GETRO</Field>
<Field>GETRO</Field>
<Field>13246</Field>
<Field>05751</Field>
<Field>LA</Field>
<Field>00005668</Field>
<Field>2</Field>
<Field/>
</LNE>
<PCK xmlns="">
<Field>A0722</Field>
<Field>4786149</Field>
<Field>100</Field>
<Field>2536</Field>
<Field>LA</Field>
<Field/>
</PCK>
<LNE xmlns="">
<Field>0005089</Field>
<Field>0040294A</Field>
<Field>2</Field>
<Field>1</Field>
<Field>PPO0000199</Field>
<Field>OP</Field>
<Field>00</Field>
<Field>82664</Field>
<Field>001822</Field>
<Field>890</Field>
<Field>HW</Field>
<Field>3500</Field>
<Field>HW</Field>
<Field>CC</Field>
<Field>0656-01</Field>
<Field>05-08289</Field>
<Field/>
<Field>N</Field>
<Field>GETRO</Field>
<Field>GETRO</Field>
<Field>120246</Field>
<Field>054551</Field>
<Field>LA</Field>
<Field>000052768</Field>
<Field>4</Field>
<Field/>
</LNE>
<PCK xmlns="">
<Field>031992</Field>
<Field>48005</Field>
<Field>12</Field>
<Field>8290</Field>
<Field>LA</Field>
<Field/>
</PCK>
<LNE xmlns="">
<Field>0005289</Field>
<Field>004029A</Field>
<Field>2</Field>
<Field>2</Field>
<Field>PPO0000199</Field>
<Field>AP</Field>
<Field>00</Field>
<Field>872087</Field>
<Field>0000859</Field>
<Field>5744</Field>
<Field>HN</Field>
<Field>367500</Field>
<Field>HW</Field>
<Field>CD</Field>
<Field>098656-02</Field>
<Field>05-08289</Field>
<Field/>
<Field>N</Field>
<Field>GETRO</Field>
<Field>GETRO</Field>
<Field>120246</Field>
<Field>054551</Field>
<Field>LA</Field>
<Field>00005768</Field>
<Field>3</Field>
<Field/>
</LNE>
<PCK xmlns="">
<Field>04022</Field>
<Field>479782</Field>
<Field>100</Field>
<Field>2872</Field>
<Field>LA</Field>
<Field/>
</PCK>
<PCK xmlns="">
<Field>04023</Field>
<Field>4797288</Field>
<Field>100</Field>
<Field>2872</Field>
<Field>LA</Field>
<Field/>
</PCK>
<ASN xmlns="">
<Field>000521288</Field>
<Field>004679294A</Field>
<Field>000075667</Field>
<Field/>
</ASN>
<HDR xmlns="">
<Field>000788288</Field>
<Field>004024594A</Field>
<Field>LA</Field>
<Field>00</Field>
<Field>33758</Field>
<Field>01</Field>
<Field>TM</Field>
<Field/>
<Field/>
<Field>M</Field>
<Field>PP</Field>
<Field>Corporation</Field>
<Field>120246</Field>
<Field>054551</Field>
<Field>05-08289</Field>
<Field>05-08289</Field>
<Field>01</Field>
<Field>LA</Field>
<Field>B</Field>
<Field>011</Field>
<Field>C</Field>
<Field>BA</Field>
<Field>8</Field>
<Field>LA</Field>
<Field>33158</Field>
<Field>24</Field>
<Field>ST</Field>
<Field/>
<Field>N</Field>
<Field>GETRO</Field>
<Field>GETRO</Field>
<Field>120246</Field>
<Field>054551</Field>
<Field>LA</Field>
<Field>000672767</Field>
<Field>8056279</Field>
<Field/>
</HDR>
<POH xmlns="">
<Field>000508288</Field>
<Field>004029294A</Field>
<Field>1</Field>
<Field>PPO000000199</Field>
<Field>LA</Field>
<Field>AP</Field>
<Field>00</Field>
<Field>1360415</Field>
<Field>1350063</Field>
<Field>1346914</Field>
<Field>13501</Field>
<Field>258304</Field>
<Field/>
<Field>35698</Field>
<Field>2900</Field>
<Field/>
<Field/>
<Field>D250</Field>
<Field>D290</Field>
<Field>HQ</Field>
<Field>10352</Field>
<Field>33158</Field>
<Field/>
<Field>N</Field>
<Field>GETRO</Field>
<Field>GETRO</Field>
<Field>120246</Field>
<Field>054551</Field>
<Field>LA</Field>
<Field>000052767</Field>
<Field/>
</POH>
<LNE xmlns="">
<Field>0005288</Field>
<Field>0040294A</Field>
<Field>1</Field>
<Field>2</Field>
<Field>PPO0000199</Field>
<Field>OP</Field>
<Field>00</Field>
<Field>874402</Field>
<Field>30001281</Field>
<Field>33158</Field>
<Field>HA</Field>
<Field>377500</Field>
<Field>HA</Field>
<Field>CC</Field>
<Field>098630-02</Field>
<Field>05-08289</Field>
<Field/>
<Field>N</Field>
<Field>GETRO</Field>
<Field>GETRO</Field>
<Field>120246</Field>
<Field>054551</Field>
<Field>LA</Field>
<Field>00002767</Field>
<Field>1</Field>
<Field/>
</LNE>
<PCK xmlns="">
<Field>03134</Field>
<Field>480075</Field>
<Field>12</Field>
<Field>8290</Field>
<Field>LA</Field>
<Field/>
</PCK>
<PCK xmlns="">
<Field>03114</Field>
<Field>480076</Field>
<Field>12</Field>
<Field>8290</Field>
<Field>LA</Field>
<Field/>
</PCK>
<PCK xmlns="">
<Field>94985</Field>
<Field>480579</Field>
<Field>12</Field>
<Field>8290</Field>
<Field>LA</Field>
<Field/>
</PCK>
<PCK xmlns="">
<Field>94995</Field>
<Field>480080</Field>
<Field>12</Field>
<Field>8290</Field>
<Field>LA</Field>
<Field/>
</PCK>
</Root>