Элемент XML с атрибутом «xsi: type» не проверяется. Ожидается атрибут типа - PullRequest
1 голос
/ 11 сентября 2009

У меня есть XML, который включает элемент с атрибутом: xsi: type = "AnswerBool". Мой xsd имеет этот элемент и настроил атрибут с именем = "тип", а затем ограничивает значения перечисления до "AnswerBool" (и других). Однако, когда я пытаюсь проверить XML, это терпит неудачу. Если я изменю XML, чтобы элемент использовал тип, а не xsi: type, все в порядке.

XML:

      <Answer xsi:type="AnswerBool">

-1

XSD:

        <xs:element name="Answer" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="Value">
                        <xs:complexType>
                            <xs:simpleContent>
                                <xs:extension base="xs:string">
                                    <xs:attribute name="type">
                                        <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                                <xs:enumeration value="xsd:int"/>
                                            </xs:restriction>
                                        </xs:simpleType>
                                    </xs:attribute>
                                </xs:extension>
                            </xs:simpleContent>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
                <xs:attribute name="type" use="optional">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="AnswerBool"/>
                            <xs:enumeration value="AnswerMsc2DTO"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:complexType>
        </xs:element>

Я пытался назвать атрибут «type» как «xsi: type», но мне не разрешено иметь «:» в имени. К сожалению, я не могу обновить XML, чтобы НЕ использовать «xsi:» перед «type». Я знаю, что я в основном работаю над тем, чтобы разрешить несколько разных типов для моего элемента «Ответ». Так что я, возможно, зашла слишком далеко, чтобы заставить все это работать. Однако ...

У кого-нибудь есть идеи относительно того, как я могу проверить свой XML?

Я имею в виду, есть ли способ включить "xsi:" в имя моего атрибута или, возможно, есть способ заставить процесс проверки только смотреть на часть "type" и игнорировать "xsi:"?

Ответы [ 2 ]

2 голосов
/ 11 сентября 2009

Во-первых, xsi - это префикс, который обычно задается для экземпляра схемы, поэтому не меняйте его.

Во-вторых, цель xsl:type состоит в том, чтобы указать, что конкретный элемент имеет определенный тип из XML-схемы. Во фрагменте схемы, который вы показали, «Ответ» является единственным типом схемы. «AnswerBool» и «AnswerMsc2DTO» - это значения, которые может иметь атрибут, объявленный type, но этот «тип» отличается от xsi:type.

Таким образом, в вашем файле вы должны использовать type, если файл XML и схема находятся в одном и том же пространстве имен (по умолчанию).

Надеюсь, это поможет.

0 голосов
/ 11 сентября 2009

xsi, вот префикс, обозначающий xmlns, то есть пространство имен

Возможно, во вводе xml отсутствует ссылка на соответствующее пространство имен.

обычно xsi используется для пространства имен экземпляра схемы.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
...