Как я могу передать XML-дескриптор в объекте XML - PullRequest
0 голосов
/ 18 октября 2011

Мы разрабатываем сервер сокетов, который должен получать xml. наша спецификация говорит, поток XML начинается с <?xml version="1.0" encoding="UTF-8"?><logmsg>

и заканчивается </logmsg>

Теперь я пытаюсь добавить строку объявления XML к моему объекту XML, но безуспешно. Собственный письменный монитор сокетов показывает только узлы <logmsg></logmsg>. Также след показывают аналогичные данные.

Возможно ли добавить xml-объявление к общему объекту XML?

logInfo = new XML('<?xml version="1.0" encoding="UTF-8"?><logmsg></logmsg>');
logInfo.@severity = value.serverity;
logInfo.@version = value.version; 

следы

<logmsg severity="2" version="0.1">
  <timestamp offset="120">
    1318939755
  </timestamp>
</logmsg>

и

var doc:XMLDocument = new XMLDocument('<logmsg></logmsg>');
doc.docTypeDecl ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
logInfo = new XML(doc);

имеет тот же результат, но не совсем, конечно, но без строки объявления.

Вы можете мне помочь?

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

Используйте метод toString для просмотра всего XML, включая объявление.

trace(doc.toString());
1 голос
/ 19 октября 2011

Сначала краткий ответ: я не знаю, как можно распечатать XML с прологом в AS3 (в соответствии со спецификацией вы называете декларацию прологом).

Более подробный ответ: класс XML отвечает за содержание документа XML. Пролог не является частью документа. XML классифицирует узел как инструкцию обработки, но эта конкретная инструкция зарезервирована и не может быть распечатана (это требование формата XML, чтобы он не отображался внутри содержимого). Другие инструкции обработки по умолчанию не добавляются в документ во время его анализа, но вы можете добавить их, используя XML.ignoreProcessingInstructions = false.

Здесь вам нужно быть немного более непредубежденным, чем обычно программисты, я не пишу это, чтобы избивать случайных людей :), поэтому, если хотите, попробуйте найти какое-то обоснование для вас. XML является самым известным, но очень популярным форматом для хранения и передачи данных. Он был разработан для представления данных, но это плохой инструмент для обмена или хранения данных. XML чрезвычайно многословен и ограничен в смысле информации о типах и видах отношений, которые он может представлять. С другой стороны, он слишком сложен (представьте себе DTD, пространства имен и все такое) для скромных результатов, которых он может достичь. Существуют хорошие альтернативы, особенно для Flash, AMF3 во всех отношениях превосходит XML. Также существует реализация буферов Ptotocol для AS3. Так что, если вы хотите использовать установленный и хорошо продуманный формат, это варианты. При работе с локальным хранилищем SQLite может быть связан с программами AIR, что также является хорошим вариантом.

Несколько подсказок относительно вашего кода:

logInfo = new XML('<?xml version="1.0" encoding="UTF-8"?><logmsg></logmsg>');

- это плохой способ создания экземпляров класса XML. XML - это тот же тип объектов, что и строки. Нет оправдания использованию оператора new с XML. Оператор new поддерживается только для того, чтобы вы могли абстрагировать создание объекта, но не нужен, когда класс известен во время компиляции. При разборе синтаксический анализатор AS3 удалит избыточные пустые текстовые узлы, поэтому код, эквивалентный приведенному выше, но более короткий и простой для синтаксического анализатора:

logInfo = <logmsg/>;

Класс XMLDocument - это, если вы настаиваете на использовании XML, можете дать ответ. Этот класс в целом проще и более знаком для программистов, которые раньше использовали DOM API. Он также имеет меньше подводных камней в том смысле, что вы должны знать, из чего скомпилированы выражения E4X, чтобы написать хороший работающий код. XMLDocument немного быстрее для простых операций, таких как доступ к атрибутам или доступ к дочерним узлам. Это, однако, более многословно. Вы можете расширить XMLDocument и заставить его печатать любым удобным для вас способом, поэтому печать пролога будет тривиальной задачей, если она еще не реализована.

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