• Техногрет
  • Проверка 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>