如何使用 XML 模式将多个 Excel 行导出到 XML 文件?
How do I export multiple Excel rows to an XML file using an XML schema?
我有一个包含汽车列表的 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 中,我单击开发人员 > 源代码 > XML 地图 > 添加,然后我从上面选择了 XML 架构文件并将其添加到我的工作表中。
我将 XML 源 window 中的每个元素映射到 Excel 工作表中的相应列("Brand" 元素映射到 A:A,"Model" 元素映射到 B:B,等等)。
在导出映射工作表时(使用“开发人员”>“导出”,然后选择目录和文件名),生成的 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 的每一行(所有五行,包括标题行)工作表。
你应该在某处添加:
minOccurs="0" maxOccurs="unbounded"
告诉excel你的元素可以出现多次。
但是您不能在 "Root" 元素中添加它。
试试这个:
<?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>
我没有使用 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假设sheet中只有一条记录。解决方案是在我的架构中创建第二个复杂元素(除了名为 "Root" 的元素之外),其中包含 >1 个我的根元素。生成的文件如下所示:
<?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 添加架构时,您会收到如下提示:
Select 引用另一个元素的元素(因为这允许递归)。在 XML 源面板中,地图将如下所示:
然后您可以将架构中的每个元素(品牌、型号、颜色、价格)映射到 sheet 中的相应列。架构映射到 sheet 后,您的数据将如下所示:
然后您可以通过转到“开发人员”>“导出”将数据导出到 XML。使用导出对话框 Select 输入文件名和目录后,生成的 XML 文件应如下所示:
这是使用 Excel 2010 完成的,其他版本会有所不同。
对我有用的是简单地编辑架构并为每个实体设置多个条目。所以在你的情况下:
<?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>
只需要为每个输入两个条目,这样就可以导出多个条目。
我有一个包含汽车列表的 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 中,我单击开发人员 > 源代码 > XML 地图 > 添加,然后我从上面选择了 XML 架构文件并将其添加到我的工作表中。 我将 XML 源 window 中的每个元素映射到 Excel 工作表中的相应列("Brand" 元素映射到 A:A,"Model" 元素映射到 B:B,等等)。
在导出映射工作表时(使用“开发人员”>“导出”,然后选择目录和文件名),生成的 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 的每一行(所有五行,包括标题行)工作表。
你应该在某处添加:
minOccurs="0" maxOccurs="unbounded"
告诉excel你的元素可以出现多次。
但是您不能在 "Root" 元素中添加它。
试试这个:
<?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>
我没有使用 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假设sheet中只有一条记录。解决方案是在我的架构中创建第二个复杂元素(除了名为 "Root" 的元素之外),其中包含 >1 个我的根元素。生成的文件如下所示:
<?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 添加架构时,您会收到如下提示:
Select 引用另一个元素的元素(因为这允许递归)。在 XML 源面板中,地图将如下所示:
然后您可以将架构中的每个元素(品牌、型号、颜色、价格)映射到 sheet 中的相应列。架构映射到 sheet 后,您的数据将如下所示:
然后您可以通过转到“开发人员”>“导出”将数据导出到 XML。使用导出对话框 Select 输入文件名和目录后,生成的 XML 文件应如下所示:
这是使用 Excel 2010 完成的,其他版本会有所不同。
对我有用的是简单地编辑架构并为每个实体设置多个条目。所以在你的情况下:
<?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>
只需要为每个输入两个条目,这样就可以导出多个条目。