如何使用XML架构将多个Excel行导出到XML文件?

时间:2015-11-04 16:56:09

标签: xml excel excel-2010 xsd.exe

我有一张包含汽车列表的Excel工作表:

Row 1 contains column descriptors for vehicle attributes

我创建了一个XML架构文档,允许我将工作表导出到XML。架构如下:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <!--Below are the primary vehicle descriptors - essentially the attributes for the cars-->
                <xsd:element name="Brand" type="xsd:string"/>
                <xsd:element name="Model" type="xsd:string"/>
                <xsd:element name="Colour" type="xsd:string"/>
                <xsd:element name="Price" type="xsd:string"/>   
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

在Excel中,我点击了Developer&gt;来源&gt; XML地图&gt;添加,然后我从上面选择了XML模式文件并将其添加到我的工作表中。 我将XML Source窗口中的每个元素映射到Excel工作表中的相应列(“Brand”元素映射到A:A,“Model”元素映射到B:B等)。

enter image description here

在导出映射工作表时(使用Developer&gt; Export,然后选择目录和文件名),生成的XML文件只有工作表中的第一行数据。由于我的XML映射包含工作表的标题行,因此XML文件如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
    <Brand>Brand</Brand>
    <Model>Model</Model>
    <Colour>Colour</Colour>
    <Price>Price</Price>
</Root>

我浏览了很多不同的帮助页面,我不知道如何让我的XML文件存储Excel工作表的每一行(所有五行,包括标题行)。

3 个答案:

答案 0 :(得分:3)

你应该添加一个地方:

minOccurs="0" maxOccurs="unbounded"

告诉excel您的元素可以多次出现。

但你无法在&#34; Root&#34;中添加它。元件。

试试这个:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Car" minOccurs="0" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Brand" type="xsd:string"/>
                            <xsd:element name="Model" type="xsd:string"/>
                            <xsd:element name="Colour" type="xsd:string"/>
                            <xsd:element name="Price" type="xsd:string"/> 
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

答案 1 :(得分:1)

我没有使用J.Doe的回答,但我认为它是正确的,因为它与我最终做的相似。链接原始XML架构时:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <!--Below are the primary vehicle descriptors - essentially the attributes for the cars-->
                <xsd:element name="Brand" type="xsd:string"/>
                <xsd:element name="Model" type="xsd:string"/>
                <xsd:element name="Colour" type="xsd:string"/>
                <xsd:element name="Price" type="xsd:string"/>   
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

Excel假设工作表中只有一条记录。解决方法是在我的模式中创建第二个复杂元素(除了名为“Root”的元素之外),其中包含&gt; 1个我的Root元素。结果文件如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Car_Table">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="Root" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>  
    </xsd:element>
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <!--Below are the primary vehicle descriptors - essentially the attributes for the cars-->
                <xsd:element name="Brand" type="xsd:string"/>
                <xsd:element name="Model" type="xsd:string"/>
                <xsd:element name="Colour" type="xsd:string"/>
                <xsd:element name="Price" type="xsd:string"/>   
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

使用Developer&gt;添加架构时来源&gt; XML地图&gt;添加,你得到一个像这样的提示:

Window showing the root selection

选择引用其他元素的元素(因为这允许递归)。在XML源面板中,地图将如下所示:

The Schema source which will allow for recursive exporting to an XML file

然后,您可以将架构中的每个元素(品牌,型号,颜色,价格)映射到工作表中的相应列。架构映射到工作表后,您的数据将如下所示:

The data in the sheet after successfully mapping the schema

然后,您可以转到Developer&gt;将数据导出到XML。出口。使用导出对话框选择文件名和目录后,生成的XML文件应如下所示:

Data from the Cars sheet in XML format

这是使用Excel 2010完成的,其他版本会略有不同。

答案 2 :(得分:1)

对我有用的只是编辑架构并为每个实体提供多个条目。所以在你的情况下:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <!--Below are the primary vehicle descriptors - essentially the attributes for the cars-->
                <xsd:element name="Brand" type="xsd:string"/>
                 <xsd:element name="Brand" type="xsd:string"/>
                <xsd:element name="Model" type="xsd:string"/>
                <xsd:element name="Model" type="xsd:string"/>
                <xsd:element name="Colour" type="xsd:string"/>
                <xsd:element name="Colour" type="xsd:string"/>
                <xsd:element name="Price" type="xsd:string"/>  
                <xsd:element name="Price" type="xsd:string"/> 
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

只需要为每个条目输入两个条目,这样就可以导出多个条目。