Вы можете использовать команду x
для печати с заданного адреса.
x (s_a*) 0x61b2e0
ПРИМЕЧАНИЕ этот ответ неверен, как указал Серж.
Тестирование с помощью xerces выдает эту ошибку: type.xsd: 3: 21 : cos-element-compatibility: Ошибка для типа '#AnonType_productinfo'. Несколько элементов с именем 'informationset', с разными типами, появляются в группе моделей.
В спецификации для есть согласованность cos-element .
. Но есть решение, похожее на ответ Марка ниже, но все еще использующее типы. Можно иметь несколько экземпляров одного и того же с разными типами, если они находятся в списке супертипа minOccurs / maxOccurs, который расширен другими типами. То есть, как список полиморфных классов в Java или C #. Это устраняет проблему, описанную выше, потому что, хотя это имя элемента может появляться в xml много раз, оно встречается в xsd только один раз.
Вот пример xsd и xml, на этот раз протестированных с xerces !:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="productinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="informationset" type="supertype" minOccurs="2" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="supertype">
</xs:complexType>
<xs:complexType name="Manufacturer">
<xs:complexContent>
<xs:extension base="supertype">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Ingredients">
<xs:complexContent>
<xs:extension base="supertype">
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
<productinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<informationset xsi:type="Manufacturer"></informationset>
<informationset xsi:type="Ingredients"></informationset>
</productinfo>
ПРИМЕЧАНИЕ. Вы не можете управлять порядком различных типов или тем, сколько раз встречается каждый тип (каждый может появляться один раз, много раз или вообще не появляться) - так же, как со списком полиморфных классов в Java или C #. Но вы можете, по крайней мере, указать точную длину списка в целом (если хотите).
Например, я ограничил приведенный выше пример ровно двумя элементами, но порядок не установлен (т.е. Производитель может быть первым или Ингредиенты могут быть первыми); и число повторений не установлено (т.е. они оба могут быть Производитель , или оба Ингредиенты , или по одному на каждый).
Вы можете, с типом XML Schema , как в:
<productinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<informationset xsi:type="Manufacturer"></informationset>
<informationset xsi:type="Ingredients"></informationset>
</productinfo>
И XSD определяет отдельные комплексные типы для каждого:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="productinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="informationset" type="Manufacturer"/>
<xs:element name="informationset" type="Ingredients"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Manufacturer">
</xs:complexType>
<xs:complexType name="Ingredients">
</xs:complexType>
</xs:schema>
Это особый случай для xsi: type
. В общем, не думайте, что вы можете указывать атрибуты с разными значениями в элементах с одинаковым именем, потому что это разные определения одного и того же элемента.
Я не на 100% ясен по точной причине - кто-нибудь знает соответствующая часть спецификации?
Вы можете попробовать что-то вроде этого - создать отдельный complexType для ваши элементы "informationSet" и ограничьте атрибут списком допустимых строк:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="productinfo">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded"
name="informationset" type="informationSetType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="informationSetType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="validAttributeType" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="validAttributeType">
<xs:restriction base="xs:string">
<xs:enumeration value="Manufacturer" />
<xs:enumeration value="Ingredients" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
Конечно, вы можете расширить этот список допустимых имен атрибутов, если хотите - просто добавьте туда больше элементов в список ограничений-перечислений.
] Марк