Проверка XML

HTML и CSSXSLTJavaScriptИзображенияСофтEtc
Владимир Токмаков

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>