如何使用CSV和XSD文件创建XML?

时间:2016-05-19 13:40:05

标签: xml csv xsd map-force

我正在尝试使用MapForce将两个csv文件的组合数据映射到XML。

这是我的意见:

Page;Project;Index
PageA;ProjectA;3
PageB;ProjectA;5
PageC;ProjectB;7

Subpage;Page;File
Subpage1;PageA;1.jpg
Subpage2;PageA;2.jpg
Subpage3;PageC;3.jpg

MapForce根据我想要的输出示例创建了一个XSD:

XML:

<Pages>
    <Page Title="PageA">
        <Template Name="PageTemplate">
            <Field Name="Context">ProjectA</Field>
            <Field Name="Index">3</Field>
        </Template>
        <Template Name="ShowSubpagesTemplate">
        </Template>
        <Template Name="SubpageTemplate">
            <Field Name="Subpage">Subpage1</Field>
            <Field Name="File">1.jpg</Field>
        </Template>     
        <Template Name="SubpageTemplate">
            <Field Name="Subpage">Subpage2</Field>
            <Field Name="File">2.jpg</Field>
        </Template>             
    </Page>
    <Page Title="PageB">
        <Template Name="PageTemplate">
            <Field Name="Context">ProjectA</Field>
            <Field Name="Index">5</Field>
        </Template>
        <Template Name="ShowSubpagesTemplate">
        </Template>
    </Page>
    <Page Title="PageC">
        <Template Name="PageTemplate">
            <Field Name="Context">ProjectB</Field>
            <Field Name="Index">7</Field>
        </Template>
        <Template Name="ShowSubpagesTemplate">
        </Template>
        <Template Name="SubpageTemplate">
            <Field Name="Subpage">Subpage3</Field>
            <Field Name="File">3.jpg</Field>
        </Template>             
    </Page>
</Pages>

XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Pages">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Page" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Template" maxOccurs="unbounded">
                                <xs:complexType mixed="true">
                                    <xs:sequence>
                                        <xs:element name="Field" minOccurs="0" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:simpleContent>
                                                    <xs:extension base="xs:string">
                                                        <xs:attribute name="Name" use="required" type="xs:string"/>
                                                    </xs:extension>
                                                </xs:simpleContent>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="Name" use="required" type="xs:string"/>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="Title" use="required" type="xs:string"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

此XSD是否正确?如何映射数据?

到目前为止我已经得到了这个:

Mapping CSV to XML

结果:

<Pages>
    <Page Title="PageA">
        <Template Name="PageTemplate">
            <Field Name="ProjectA"/>
        </Template>
    </Page>
    <Page Title="PageB">
        <Template>
            <Field Name="ProjectA"/>
        </Template>
    </Page>
    <Page Title="PageC">
        <Template Name="PageTemplate">
            <Field Name="ProjectB"/>
        </Template>
    </Page>
</Pages>

嗯,这是一个开始,但我无法弄清楚如何获得所需的XML。

有人可以帮我一点吗?

1 个答案:

答案 0 :(得分:0)

请参阅http://www.altova.com/forum/default.aspx?g=posts&t=1100001095,了解我在Altova论坛上获得的一个很好的解决方案。