我正在尝试设置用于 Excel XML 映射的架构文件。我想要完成的是获取电子表格中的每一行,并让它像这样输出 XML:
Excel 行:
XML_Name | Initiative | HitPoints
ad_wasp 5 42
hob_goblin 7 22
所需的 XML 输出:
<entities>
<ad_wasp>
<initiative>5</initiative>
<hitpoints>42</hitpoints>
</ad_wasp>
<hob_gob>
<initiative>7</initiative>
<hitpoints>22</hitpoints>
</hob_gob>
</entities>
换句话说 - 我想将我的 Excel 工作表中的第一行作为主要元素标签,然后在其下,将以下行作为子元素放入。我希望它采用这种格式,因为我正在使用的程序(Fantasy Grounds 2)接受 XML 格式的模块化插件,并且需要像这样唯一命名的元素,包含子元素。
请记住——我对 XML 完全陌生。也许我不能这样做。在过去的 3 个小时里,我能够得到的是……
- 在 Excel 中,单击“开发人员”选项卡。
- 定义 XML 映射源
- 将其指向 XSD
我已经使用 XMLSpy 创建了一个架构文件,如下所示 - 但是,我遇到的问题是下面的架构将所有内容都放在这样的标签中:
<xml_tag>
<Name>aasimar</Name>
<XP>Aasimar</XP>
<CR>Aasimar</CR>
<Init>Aasimar</Init>
</xml_tag>
有没有办法做我想做的事?如果我尝试将“type="xs:string"”声明放入“XML_Tag”元素中,则会出现错误(元素声明“xml_tag”的“type”属性和匿名类型定义是互斥的。)但是- 我不知道如何使元素成为“动态变量”(可能使用错误的行话),而不是相同的静态标签。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Entities">
<xs:complexType>
<xs:sequence>
<xs:element name="xml_tag" form="unqualified" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element name="Name" type="xs:string" form="unqualified" nillable="true" minOccurs="0"/>
<xs:element name="XP" type="xs:integer" form="unqualified" nillable="true" minOccurs="0"/>
<xs:element name="CR" type="xs:integer" form="unqualified" nillable="true" minOccurs="0"/>
<xs:element name="Init" type="xs:integer" form="unqualified" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>