Как экспортировать несколько строк Excel в файл XML с использованием схемы XML?

У меня есть лист Excel со списком автомобилей:

Строка 1 содержит дескрипторы столбцов для атрибутов транспортных средств

Я создал документ схемы 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" с соответствующим столбцом на листе Excel (элемент "Бренд" сопоставлен с A:A, элемент "Модель" сопоставлен с 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.

3 ответа

Решение

Я не использовал ответ Дж. Доу, но я предполагаю, что он правильный, потому что он похож на то, что я в итоге делал. При связывании исходной схемы 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 из моих корневых элементов. Результирующий файл выглядел так:

<?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 карта будет выглядеть так:

Источник схемы, который позволит рекурсивный экспорт в файл XML

Затем можно сопоставить каждый элемент в схеме (марка, модель, цвет, цена) с соответствующим столбцом на листе. Как только схема будет сопоставлена ​​с листом, ваши данные будут выглядеть так:

Данные на листе после успешного сопоставления схемы

Затем вы можете экспортировать данные в XML, выбрав Developer > Export. После выбора имени файла и каталога с помощью диалогового окна экспорта полученный XML-файл должен выглядеть примерно так:

Данные из листа Cars в формате XML

Это было сделано с помощью Excel 2010, другие версии будут несколько отличаться.

Вы должны добавить куда-нибудь это:

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>

Для меня сработало просто редактировать схему и иметь несколько записей для каждой сущности. Итак, в вашем случае:

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

Просто нужно ввести две записи для каждой, и это позволяет экспортировать несколько записей.

Другие вопросы по тегам