【问题标题】:How do I export multiple Excel rows to an XML file using an XML schema?如何使用 XML 架构将多个 Excel 行导出到 XML 文件?
【发布时间】:2015-11-04 16:56:08
【问题描述】:

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

我创建了一个 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 > Source > XML Maps > Add,然后从上面选择 XML 模式文件并将其添加到我的工作表中。 我将 XML Source 窗口中的每个元素映射到 Excel 工作表中的相应列(“Brand”元素映射到 A:A,“Model”元素映射到 B:B,等等)。

在导出映射的工作表时(使用 Developer > 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 工作表的每一行(全部五行,包括标题行)。

【问题讨论】:

    标签: xml excel excel-2010 xsd.exe


    【解决方案1】:

    你应该在某处添加这个:

    minOccurs="0" maxOccurs="unbounded"
    

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

    但您不能将其添加到“根”元素中。

    试试这个:

    <?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>
    

    【讨论】:

      【解决方案2】:

      我没有使用 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”的元素),其中包含 >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 > Source > XML Maps > Add 添加架构时,您会收到如下提示:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        <?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>
        

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

        【讨论】:

        • 简单,优雅,它实际上对我有用。谢谢@MapZombie
        • @Gravinco 这一点都不优雅。
        • 我要 2/3 :P
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-30
        相关资源
        最近更新 更多