0

我设法通过水平分割它们来映射每条线。当(Q1, Q2)和 (Q3, Q4) 在各自的封闭标签下没有聚集在一起时,问题就来了。此外,我们需要处理一组重复的行。就像在下面的示例中一样,我再次重复了前两行。

Q12222222222
Q21111111111
Q13333333333
Q24444444444
Q35555555555
Q46666666666

下面给出的目标 XSD文件:

<xs:schema>
    <xs:element name="Statement">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="StatementDetails" type="StatementDetailsT" maxOccurs="unbounded"/>
                <xs:element name="FinalStatement" type="FinalStatementT" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="StatementDetailsT">
        <xs:sequence>
            <xs:element name="Q1" type="Q1_T" maxOccurs="1"/>
            <xs:element name="Q2" type="Q2_T" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="FinalStatementT">
        <xs:sequence>
            <xs:element name="Q3" type="Q3_T" maxOccurs="1"/>
            <xs:element name="Q4" type="Q4_T" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Q1_T">
        <xs:sequence>
            <xs:element type="st:string2" name="cIdentifier" fixed="Q1" />
            <xs:element type="st:string10" name="sNumber" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Q2_T">
        <xs:sequence>
            <xs:element type="st:string2" name="cIdentifier" fixed="Q2" />
            <xs:element type="st:string11" name="antiDumpingDuty" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Q3_T">
        <xs:sequence>
            <xs:element type="st:string2" name="cIdentifier" fixed="Q3" />
            <xs:element type="st:string10" name="sNumber" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Q4_T">
        <xs:sequence>
            <xs:element type="st:string2" name="cIdentifier" fixed="Q4" />
            <xs:element type="st:string11" name="antiDumpingDuty" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

</xs:schema>

预期的 XML应如下所示:

    <Statement>
        <StatementDetails>
            <Q1>
                <cIdentifier>Q1</cIdentifier>
                <sNumber>2222222222</sNumber>
            </Q1>
            <Q2>
                <cIdentifier>Q2</cIdentifier>
                <antiDumpingDuty>1111111111</antiDumpingDuty>
            </Q2>
        </StatementDetails>
        <StatementDetails>
            <Q1>
                <cIdentifier>Q1</cIdentifier>
                <sNumber>3333333333</sNumber>
            </Q1>
            <Q2>
                <cIdentifier>Q2</cIdentifier>
                <antiDumpingDuty>4444444444</antiDumpingDuty>
            </Q2>
        </StatementDetails>
        <FinalStatement>
            <Q3>
                <cIdentifier>Q3</cIdentifier>
                <sNumber>5555555555</sNumber>               
            </Q3>
            <Q4>
                <cIdentifier>Q4</cIdentifier>
                <antiDumpingDuty>6666666666</antiDumpingDuty>
            </Q4>
        </FinalStatement>
    </Statement>

我已按以下顺序应用拆分:

  1. 使用模式重复拆分:分隔(行开头),正则表达式:是,模式:^Q[13] 这将数据分成 3 段,每段两行。

  2. Switch 包含正则表达式 : ^Q[12], ^Q[34].

  3. 然后将步骤 2 的每个输出应用水平重复拆分,这将每个段分成单行。然后根据列长度应用多次拆分。

附上拆分和映射图以供参考。
拆分图
映射图

映射生成的实际 XML文件如下所示:

<Statement>
    <StatementDetails>
        <Q1>
            <cIdentifier>Q1</cIdentifier>
            <sNumber>2222222222</sNumber>
        </Q1>
    </StatementDetails>
    <StatementDetails>
        <Q2>
            <cIdentifier>Q2</cIdentifier>
            <antiDumpingDuty>1111111111</antiDumpingDuty>
        </Q2>
    </StatementDetails>
    <StatementDetails>
        <Q1>
            <cIdentifier>Q1</cIdentifier>
            <sNumber>3333333333</sNumber>
        </Q1>
    </StatementDetails>
    <StatementDetails>
        <Q2>
            <cIdentifier>Q2</cIdentifier>
            <antiDumpingDuty>4444444444</antiDumpingDuty>
        </Q2>
    </StatementDetails>
    <FinalStatement>
        <Q3>
            <cIdentifier>Q3</cIdentifier>
            <sNumber>5555555555</sNumber>
        </Q3>
    </FinalStatement>
    <FinalStatement>
        <Q4>
            <cIdentifier>Q4</cIdentifier>
            <antiDumpingDuty>6666666666</antiDumpingDuty>
        </Q4>
    </FinalStatement>
</Statement>

请有人建议结构或映射出了什么问题?提前致谢。

4

1 回答 1

0

当您将“RepeatedSplit - 水平”连接到“StatementDetails”时,您的映射将在每次找到“RepeatedSplit - 水平”事件时创建一个“StatementDetails”标签。

这可以解释为什么 Q1 和 Q2 没有分组。

我可以建议您删除此连接,而是添加从“ROW Q1”开始到“StatementDetails”的第二个连接。

我猜它应该只在找到“Q1”时才创建“StatementDetails”标签。

我现在无法测试我提出的解决方案。

可以测试并让我们知道它是否对您有用吗?

于 2018-04-21T09:20:42.653 回答