package org.orbeon.oxf.xml; import org.apache.commons.lang3.StringUtils; public class XMLUtils { public static String unescapeXMLMinimal(String str) { str = StringUtils.replace(str, "&", "&"); str = StringUtils.replace(str, "<", "<"); str = StringUtils.replace(str, ">", ">"); return str; } public static String prefixFromQName(String qName) { final int colonIndex = qName.indexOf(':'); return (colonIndex == -1) ? "" : qName.substring(0, colonIndex); } public static String localNameFromQName(String qName) { final int colonIndex = qName.indexOf(':'); return (colonIndex == -1) ? qName : qName.substring(colonIndex + 1); } public static String buildQName(String prefix, String localname) { return (prefix == null || prefix.equals("")) ? localname : prefix + ":" + localname; } /** * Encode a URI and local name to an exploded QName (also known as a "Clark name") String. */ public static String buildExplodedQName(String uri, String localname) { if ("".equals(uri)) return localname; else { return "{" + uri + '}' + localname; } } // http://www.w3.org/TR/xpath-30/#doc-xpath30-URIQualifiedName public static String buildURIQualifiedName(String uri, String localname) { if ("".equals(uri)) return localname; else { return "Q{" + uri + '}' + localname; } } public static String escapeXMLMinimal(String str) { str = StringUtils.replace(str, "&", "&"); str = StringUtils.replace(str, "<", "<"); str = StringUtils.replace(str, ">", ">"); // do this one too because the sequence `]]>` is not allowed return str; } public static String escapeXMLForAttribute(String str) { str = escapeXMLMinimal(str); str = StringUtils.replace(str, "\"", """); return str; } }