Что вызывает ошибку "Тип элемента" xsi: "должен сопровождаться либо спецификацией атрибута,"> "или" /> "" здесь? - PullRequest
0 голосов
/ 01 апреля 2020

Здесь PersonList является тегом root. PersonList содержит запись о каждом человеке с adhaarno, именем, возрастом и адресом.

<?xml version="1.0"  encoding="UTF-8"?>
<PersonList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="PersonList.xsd">
    <Person>
        <adhaarno>414356782345</adhaarno>
        <name>
            <firstname>Zeenath</firstname>
        </name>
        <age>28</age>
        <address>
            <doorno>33</doorno>
            <street>Raidu Street</street>
            <city>coimbatore</city>
            <pincode>641039</pincode>
        </address>
    </Person>

    <Person Category="seniorcitizen">
        <adhaarno>414356782345</adhaarno>
        <name>
            <firstname>Simon</firstname>
        </name>
        <age>75</age>
        <address>
            <doorno>7</doorno>
            <street>Raja Street</street>
            <city>Chennai</city>
            <pincode>600005</pincode>
        </address>
    </Person>

    <Person>
        <adhaarno>414356782345</adhaarno>
        <name>
            <lastname>Varma</lastname>
        </name>
        <age>25</age>
        <address>
            <doorno>25</doorno>
            <street>cox street</street>
            <city>Bangalore</city>
            <pincode>560025</pincode>
        </address>
    </Person>
</PersonList>

Для этого я написал следующее xsd:

<?xml version="1.0" encoding="UTF-8"?>
    <xsi:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified" attributeFormDefault="unqualified">
        <xsi:element name="PersonList">
            <xsi:complexType>
                <xsi:element name="Person" maxOccurs="unbounded">
                    <xsi:complexType>
                    <xsi:attribute name="Category" type="xsi:string" use="optional"/>
                        <xsi:sequence>
                            <xsi:element name="adhaarno" type="xsi:integer"/>
                            <xsi:element name="name">
                                <xsi:complexType>
                                    <xsi:choice>
                                        <xsi:element name="firstname" type="xsi:string"/>
                                        <xsi:element name="lastname" type="xsi:string"/>
                                    </xsi:choice>
                                </xsi:complexType>
                            <xsi:/element>
                            <xsi:element name="age" type="xsi:integer"/>
                            <xsi:element name="address">
                                <xsi:complexType>
                                    <xsi:sequence>
                                        <xsi:element name="doorno" type="xsi:integer"/>
                                        <xsi:element name="street" type="xsi:string"/>
                                        <xsi:element name="city" type="xsi:string"/>
                                        <xsi:element name="pincode" type="xsi:integer"/>
                                    </xsi:sequence>
                                </xsi:complexType>
                            </xsi:element>
                        </xsi:sequence>
                    </xsi:complexType>
                </xsi:element>
            </xsi:complexType>
        </xsi:element>
    </xsi:schema>

После запуска xsd в соответствующая платформа, я получил эту ошибку:

Exception: Element type "xsi:" must be followed by either attribute specificatio ns, ">" or "/>". 
false

Хотя я знаю, что обычно вызывает эту ошибку, пожалуйста, помогите мне устранить причину этого в xsd при условии.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Во-первых, ваша схема находится в неверном пространстве имен. Это должно быть "http://www.w3.org/2001/XMLSchema", а не "http://www.w3.org/2001/XMLSchema-instance". Вы можете использовать любой префикс пространства имен, который вам нравится: «xs» и «xsd» являются обычными вариантами, в то время как «xsi» разрешен, но может сбить с толку ваших читателей.

Но ответ на конкретный c вопрос к сообщению об ошибке относится то, что в середине вашей "схемы" у вас есть

<xsi:/element>

, которая явно нарушена.

0 голосов
/ 01 апреля 2020

XSD содержит довольно много ошибок.

(1) Он не правильно сформирован.

(2) Я исправил пространство имен и его префикс.

(3) Добавлена ​​недостающая последовательность в элементе root.

(4) Перенес определение атрибута в правильное местоположение.

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="PersonList">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Person" maxOccurs="unbounded">
                    <xsd:complexType>

                        <xsd:sequence>
                            <xsd:element name="adhaarno" type="xsd:integer"/>
                            <xsd:element name="name">
                                <xsd:complexType>
                                    <xsd:choice>
                                        <xsd:element name="firstname" type="xsd:string"/>
                                        <xsd:element name="lastname" type="xsd:string"/>
                                    </xsd:choice>
                                </xsd:complexType>
                            </xsd:element>
                            <xsd:element name="age" type="xsd:integer"/>
                            <xsd:element name="address">
                                <xsd:complexType>
                                    <xsd:sequence>
                                        <xsd:element name="doorno" type="xsd:integer"/>
                                        <xsd:element name="street" type="xsd:string"/>
                                        <xsd:element name="city" type="xsd:string"/>
                                        <xsd:element name="pincode" type="xsd:integer"/>
                                    </xsd:sequence>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="Category" type="xsd:string" use="optional"/>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...