Техногрет




Владимир Токмаков

Проверка XML 13 декабря 2003


Задача.

Проверить строку на соответствие XML.

01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
<script type="text/javascript">
    function xmlValidate( sValue ){
        if( sValue ){
            // вырезаем инструкции
            sValue = sValue.replace( /<\?.*\?>/g, '' );
            // вырезаем doctype
            sValue = sValue.replace( /<\!DOCTYPE.*?>/g, '' );
            // вырезаем коменты и CDATA
            var rTags = /(<\x21--(.|[\n\r])?-->|<\!\[CDATA\[(.|[\n\r])?\]\]>)/g;
            while( sValue.search( rTags ) >= 0 ){
                sValue = sValue.replace( rTags, '' );
            }
            // вырезаем entities
            sValue = sValue.replace( /&(\w+|#\d+);/gi, '' );
            if( sValue.search( '&' ) >= 0 ){
                return false;
            }
            // вырезаем одинарные тэги
            sValue = sValue.replace( /<\w[-\w:]*(\s+[-\w:]+\s*=\s*(["'])[^<>]*\2)*\s*\/>/gi, '' );
            // вырезаем двойные тэги
            var rTags = /<(\w[-\w:]*)(\s+[-\w:]+\s*=\s*(["'])[^<>]*\3)*\s*>([^<]*)<\/\1>/gi;
            while( sValue.search( rTags ) >= 0 ){
                sValue = sValue.replace( rTags, '$4' );
            }
            if( sValue.search( '<' ) >= 0 ){
                return false;
            }
            return true;
        }else{
            return true;
        }
    }
</script>
<form name="example" onsubmit="return false">
    <textarea name="text" style="width: 100%; height: 10em;"></textarea>
    <input type="button" value="Проверить"
        onclick="if( xmlValidate( document.example.text.value ) )
        { alert( 'Все хорошо!' ) }else{ alert( 'Это не XML!' ); }" />
</form>



Поделиться ссылочкой: