Java XML: Les caractères spéciaux dans XML*

Author:

Java XML: Les caractères spéciaux dans XML*
Download

/***** Code de MesExemples.com *******/
  /* * Funambol is a mobile platform developed by Funambol, Inc.  * Copyright (C) 2003 - 2007 Funambol, Inc. *  * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License version 3 as published by * the Free Software Foundation with the addition of the following permission  * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE  * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS. *  * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more * details. *  * You should have received a copy of the GNU Affero General Public License  * along with this program; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA. *  * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite  * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com. *  * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. *  * In accordance with Section 7(b) of the GNU Affero General Public License * version 3, these Appropriate Legal Notices must retain the display of the * "Powered by Funambol" logo. If the display of the logo is not reasonably  * feasible for technical reasons, the Appropriate Legal Notices must display * the words "Powered by Funambol".  */import java.util.Hashtable;/** * This class supplies some methods * to escape / unescape special chars according XML specifications * */class Entities {    private static final String[][] BASIC_ARRAY = {        {"quot" , "34"}// " - double-quote        {"amp"  , "38"}, // &#038; - ampersand        {"lt"   , "60"}, // < - less-than        {"gt"   , "62"}, // > - greater-than        {"apos" , "39"}, // XML apostrophe    };    /**     * <p>The set of entities supported by standard XML.</p>     */    public static final Entities XML;    static {        XML = new Entities();        XML.addEntities(BASIC_ARRAY);    }    static interface EntityMap {        void add(String name, int value);        String name(int value);        int value(String name);    }    static class PrimitiveEntityMap implements EntityMap {        private Hashtable mapNameToValue = new Hashtable();        private Hashtable mapValueToName = new Hashtable();        public void add(String name, int value) {            mapNameToValue.put(name, new Integer(value));            mapValueToName.put(new Integer(value), name);        }        public String name(int value) {            return (String) mapValueToName.get(new Integer(value));        }        public int value(String name) {            Object value = mapNameToValue.get(name);            if (value == null) {                return -1;            }            return ((Integer) value).intValue();        }    }    static class LookupEntityMap extends PrimitiveEntityMap {        private String[] lookupTable;        private int      LOOKUP_TABLE_SIZE = 256;        public String name(int value) {            if (value < LOOKUP_TABLE_SIZE) {                return lookupTable()[value];            }            return super.name(value);        }        private String[] lookupTable() {            if (lookupTable == null) {                createLookupTable();            }            return lookupTable;        }        private void createLookupTable() {            lookupTable = new String[LOOKUP_TABLE_SIZE];            for (int i = 0, l = LOOKUP_TABLE_SIZE; i < l; ++i) {                lookupTable[i] = super.name(i);            }        }    }    EntityMap map = new Entities.LookupEntityMap();    public void addEntities(String[][] entityArray) {        for (int i = 0; i < entityArray.length; ++i) {            addEntity(entityArray[i][0], Integer.parseInt(entityArray[i][1]));        }    }    public void addEntity(String name, int value) {        map.add(name, value);    }    public String entityName(int value) {        return map.name(value);    }    public int entityValue(String name) {        return map.value(name);    }    /**     * <p>Escapes special characters in a <code>String</code>.</p>     *     *     * @param str The <code>String</code> to escape.     * @return A escaped <code>String</code>.     */    public String escape(String str) {        char          ch          = ' '  ;        String        entityName  = null ;        StringBuffer  buf         = null ;        int           intValue    = 0    ;        buf = new StringBuffer(str.length() * 2);        for (int i = 0, l = str.length(); i < l; ++i) {            ch = str.charAt(i);            entityName = this.entityName(ch);            if (entityName == null) {                if (ch > 0x7F) {                    intValue = ch;                    buf.append("&#");                    buf.append(intValue);                    buf.append(';');                } else {                    buf.append(ch);                }            } else {                buf.append('&#038;');                buf.append(entityName);                buf.append(';');            }        }        return buf.toString();    }    /**     * <p>Unescapes special characters in a <code>String</code>.</p>     *     * @param str The <code>String</code> to escape.     * @return A un-escaped <code>String</code>.     */    public String unescape(String str) {        StringBuffer  buf          = null ;        String        entityName   = null ;        char          ch           = ' '  ;        char          charAt1      = ' '  ;        int           entityValue  = 0    ;        buf = new StringBuffer(str.length());        for (int i = 0, l = str.length(); i < l; ++i) {            ch = str.charAt(i);            if (ch == '&#038;') {                int semi = str.indexOf(';', i + 1);                if (semi == -1) {                    buf.append(ch);                    continue;                }                entityName = str.substring(i + 1, semi);                if (entityName.charAt(0) == '#') {                    charAt1 = entityName.charAt(1);                    if (charAt1 == 'x' || charAt1=='X') {                        entityValue = Integer.valueOf(entityName.substring(2), 16).intValue();                    } else {                        entityValue = Integer.parseInt(entityName.substring(1));                    }                } else {                    entityValue = this.entityValue(entityName);                } if (entityValue == -1) {                    buf.append('&#038;');                    buf.append(entityName);                    buf.append(';');                } else {                    buf.append((char) (entityValue));                }                i = semi;            } else {                buf.append(ch);            }        }        return buf.toString();    }}         

Code testé avec le fichier XML Suivant

<?xml version="1.0" encoding="windows-1252"?>
<!-- Edited by MesEXemple.com -->
<note>
	<to>Sakoba</to>
	<from>Adams</from>
	<heading>Rappel</heading>
	<body>Ne m'oubliez pas ce week-end!</body>
</note>

Cet article Java XML: Les caractères spéciaux dans XML* est apparu en premier sur .