Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Распознавание xml, приходящего в String (http://www.flasher.ru/forum/showthread.php?t=162014)

ProxyGreen 30.07.2011 17:35

Мой вариант:
Код AS3:

public function xmlDetection(str:String):Boolean {
                        if (str.search(/(?:<\?.+\?>)?\s*(?:<(\w+)>.*<\/\1>\s*$|^<.+\/>$)/) == -1) {
                                return false;
                        }
 
                        return true;
                }

Результаты:
Код AS3:

        var inputStr:String = "123";                
            var inputStr2:String = "<node>123</node>";
                    var inputStr3:String='<?xml version="1.0" encoding="utf-8" ?> <node>123</node>'
                        var inputStr4:String = "<node attr='someValue'/>";
                        var inputStr5:String = "<node>123";
 
                        trace(xmlDetection(inputStr)); //false
                        trace(xmlDetection(inputStr2)); //true
                        trace(xmlDetection(inputStr3)); //true
                        trace(xmlDetection(inputStr4)); //true
                        trace(xmlDetection(inputStr5)); //false


i.o. 30.07.2011 17:59

не факт, что такая регулярка будет быстрее, чем
Код AS3:

inputXML..*.length()


ProxyGreen 30.07.2011 18:16

Скорость здесь не главное по моему.
К примеру для:
Код AS3:

 var inputStr4:String = "<node attr='someValue'/>";

inputXML..*.length(), выдаёт ноль, а моя ф-я определяет его корректно. Ведь иначе мы должны сразу принять строку за XML, а потом по количеству детей "фиктивной" XML определить является ли она настоящей XML. Несколько запутанная логика.

mikhailk 30.07.2011 23:12

Вариант с регулярными выражениями неплох.
Он пропускает невалидный xml, но строки действительно отсекает.

Код AS3:

var str1:String = "<node>123</node></node>";
trace(str1, xmlDetection(str1));
var str2:String = "<node a='123 />";
trace(str2, xmlDetection(str2));


ProxyGreen 31.07.2011 00:26

Упс. Добавил поддержку так скажем "атрибутов" (какого-то текста после имени главной ноды, т.е. проверка на соответствие стандарту не ведётся)

Код AS3:

public function xmlDetection(str:String):Boolean {
                        if (str.search(/(?:<\?.+\?>)?\s*(?:<(\w+)[^>]*>.*<\/\1>\s*$|^<.+\/>$)/) == -1) {
                                return false;
                        }
 
                        return true;
                }



Часовой пояс GMT +4, время: 12:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.