1

我正在尝试设置用于 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 个小时里,我能够得到的是……

  1. 在 Excel 中,单击“开发人员”选项卡。
  2. 定义 XML 映射源
  3. 将其指向 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>
4

0 回答 0