Любой способ заставить значения атрибута по умолчанию в XML анализироваться во Flex на основе схемы XSD? - PullRequest
1 голос
/ 16 июня 2009

У меня есть xml с xml-схемой. Xml-схема определяет абстрактный сложный тип с 2 необязательными атрибутами, которые имеют значения по умолчанию. Тогда у меня есть несколько сложных типов, которые расширяют базовый. И, наконец, узлы определенных типов. Поэтому я загружаю xml, и когда я анализирую каждый узел, необязательные атрибуты вообще отсутствуют. Я пытался дурачиться с пространствами имен, даже:

XML.ignoreProcessingInstructions = false;

Не повезло. Нечто подобное испытал этот парень на codingforums , но это было как 5 лет назад. То же самое происходит со мной в Firefox 3.0.11 - XML ​​отображается без атрибутов по умолчанию. Пока я устанавливаю значения по умолчанию в коде, но нет ли способа сделать их доступными из xml-схемы?

Пример XML-схемы:

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.myorg.org" xmlns:tns="http://www.myorg.org" elementFormDefault="qualified">
<element name="config" type="tns:FieldsNode"></element>

<complexType name="FieldsNode">
    <choice minOccurs="0" maxOccurs="unbounded">
        <element name="ImagePicker" type="tns:ImagePickerNode"
            maxOccurs="unbounded" minOccurs="0">
        </element>
    </choice>
</complexType>

<complexType name="FieldBase">
    <attribute use="required" name="id" type="string"></attribute>
    <attribute use="optional" default="true" name="mandatory"
        type="boolean">
    </attribute>
    <attribute default="3" name="colspan" type="int" use="optional"></attribute>
</complexType>

<complexType name="ImagePickerNode">
    <complexContent>
        <extension base="tns:FieldBase">
            <attribute name="maxWidth" type="int" use="required"></attribute>
            <attribute name="maxHeight" type="int" use="required"></attribute>
        </extension>
    </complexContent>
</complexType>

Пример XML:

<config xmlns="http://www.myorg.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.myorg.org test.xsd">
    <ImagePicker id="somePicker" maxHeight="10" maxWidth="12"/>
    <ImagePicker id="someOtherPicker" maxHeight="100" maxWidth="212" colspan="1" mandatory="false"/> 
</config>

Редактировать: добавлены пример XML и схема.

Ответы [ 3 ]

1 голос
/ 29 октября 2009

Недавно наткнулся на следующую тему: Проверка Xml в Flex3 Air

Ответ там Грегори Кидди также может ответить на мой вопрос. В основном две ссылки, чтобы отметить согласно указанному ответу:

XML и XSD 1

XML и XSD 2

1 голос
/ 29 октября 2009

На самом деле, возможно, этот парень написал, как использовать классы XMLDecoder и XMLEncoder в гибкой среде для разбора / записи xml на основе схемы:

http://blog.misprintt.net/?p=181

http://blog.misprintt.net/?p=192

Пример приложения, демонстрирующего как синтаксический анализ, так и запись: http://misprintt.net/examples/xmlSchema/

Однако следует отметить, что в этих классах есть несколько ошибок, которые могут вызывать или не создавать проблемы для вашего конкретного приложения. Один из них, если я правильно помню, напрямую связан с необязательными параметрами со значениями по умолчанию в схеме. В некоторых (или, возможно, во всех) случаях значение по умолчанию никогда не устанавливалось. Однако эти ошибки, как правило, очень легко исправить, когда вы выяснили, где в классах Encoder / Decoder проблемы (потому что это почти всегда те два класса). Может быть сложно обнаружить ошибку из-за высокой рекурсивной природы этих классов, но для небольших схем (и впоследствии файлов XML) это не очень сложно.

Вам все еще нужно создать типы ActionScript для соответствующего типа схемы. Это можно сделать несколько автоматически, если XMLDecoder выплеснет свой результат в анонимный объект, а затем сериализует этот объект непосредственно в формат JSON или формат класса AS. Однако, если все атрибуты и элементы не существуют в вашем xml, вы пропустите некоторые свойства. Есть еще этот проект, который мне еще предстоит оценить: http://www.graniteds.org/confluence/display/DOC/2.+Gas3+Code+Generator

Он предположительно конвертирует Java bean-компоненты в AS3, и в наши дни конвертеры схемы в Java-бин стоят десятку.

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

0 голосов
/ 17 июня 2009

Я не знаю ни одной библиотеки XML, которая вставляет атрибуты по умолчанию на основе схемы в DOM для файла XML. Конечно, Flex не делает. Я считаю, что значения по умолчанию, указанные в схеме, на самом деле означают скорее документацию для инструментов, таких как те, которые генерируют XML-сериализуемые классы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...