📄 utilxml.java
字号:
Element childElement = (Element) node; elements.add(childElement); } } while ((node = node.getNextSibling()) != null); } return elements; } /** Return a List of Element objects that have the given name and are * immediate children of the given element; if name is null, all child * elements will be included. */ public static List childElementList(Element element, Set childElementNames) { if (element == null) return null; List elements = FastList.newInstance(); if (childElementNames == null) return elements; Node node = element.getFirstChild(); if (node != null) { do { if (node.getNodeType() == Node.ELEMENT_NODE && childElementNames.contains(node.getNodeName())) { Element childElement = (Element) node; elements.add(childElement); } } while ((node = node.getNextSibling()) != null); } return elements; } /** Return the first child Element * returns the first element. */ public static Element firstChildElement(Element element, Set childElementNames) { if (element == null) return null; // get the first element with the given name Node node = element.getFirstChild(); if (node != null) { do { if (node.getNodeType() == Node.ELEMENT_NODE && childElementNames.contains(node.getNodeName())) { Element childElement = (Element) node; return childElement; } } while ((node = node.getNextSibling()) != null); } return null; } /** Return the first child Element * returns the first element. */ public static Element firstChildElement(Element element) { if (element == null) return null; // get the first element with the given name Node node = element.getFirstChild(); if (node != null) { do { if (node.getNodeType() == Node.ELEMENT_NODE) { Element childElement = (Element) node; return childElement; } } while ((node = node.getNextSibling()) != null); } return null; } /** Return the first child Element with the given name; if name is null * returns the first element. */ public static Element firstChildElement(Element element, String childElementName) { if (element == null) return null; // get the first element with the given name Node node = element.getFirstChild(); if (node != null) { do { if (node.getNodeType() == Node.ELEMENT_NODE && (childElementName == null || childElementName.equals(node.getNodeName()))) { Element childElement = (Element) node; return childElement; } } while ((node = node.getNextSibling()) != null); } return null; } /** Return the first child Element with the given name; if name is null * returns the first element. */ public static Element firstChildElement(Element element, String childElementName, String attrName, String attrValue) { if (element == null) return null; // get the first element with the given name Node node = element.getFirstChild(); if (node != null) { do { if (node.getNodeType() == Node.ELEMENT_NODE && (childElementName == null || childElementName.equals(node.getNodeName()))) { Element childElement = (Element) node; String value = childElement.getAttribute(attrName); if (value != null && value.equals(attrValue)) { return childElement; } } } while ((node = node.getNextSibling()) != null); } return null; } /** Return the text (node value) contained by the named child node. */ public static String childElementValue(Element element, String childElementName) { if (element == null) return null; // get the value of the first element with the given name Element childElement = firstChildElement(element, childElementName); return elementValue(childElement); } /** Return the text (node value) contained by the named child node or a default value if null. */ public static String childElementValue(Element element, String childElementName, String defaultValue) { if (element == null) return defaultValue; // get the value of the first element with the given name Element childElement = firstChildElement(element, childElementName); String elementValue = elementValue(childElement); if (elementValue == null || elementValue.length() == 0) return defaultValue; else return elementValue; } /** Return the text (node value) of the first node under this, works best if normalized. */ public static String elementValue(Element element) { if (element == null) return null; // make sure we get all the text there... element.normalize(); Node textNode = element.getFirstChild(); if (textNode == null) return null; StringBuffer valueBuffer = new StringBuffer(); do { if (textNode.getNodeType() == Node.CDATA_SECTION_NODE || textNode.getNodeType() == Node.TEXT_NODE) { valueBuffer.append(textNode.getNodeValue()); } } while ((textNode = textNode.getNextSibling()) != null); return valueBuffer.toString(); } public static String checkEmpty(String string) { if (string != null && string.length() > 0) return string; else return ""; } public static String checkEmpty(String string1, String string2) { if (string1 != null && string1.length() > 0) return string1; else if (string2 != null && string2.length() > 0) return string2; else return ""; } public static String checkEmpty(String string1, String string2, String string3) { if (string1 != null && string1.length() > 0) return string1; else if (string2 != null && string2.length() > 0) return string2; else if (string3 != null && string3.length() > 0) return string3; else return ""; } public static boolean checkBoolean(String str) { return checkBoolean(str, false); } public static boolean checkBoolean(String str, boolean defaultValue) { if (defaultValue) { //default to true, ie anything but false is true return !"false".equals(str); } else { //default to false, ie anything but true is false return "true".equals(str); } } /** * Local entity resolver to handle J2EE DTDs. With this a http connection * to sun is not needed during deployment. * Function boolean hadDTD() is here to avoid validation errors in * descriptors that do not have a DOCTYPE declaration. */ public static class LocalResolver implements EntityResolver { private boolean hasDTD = false; private EntityResolver defaultResolver; public LocalResolver(EntityResolver defaultResolver) { this.defaultResolver = defaultResolver; } /** * Returns DTD inputSource. If DTD was found in the dtds Map and inputSource was created * flag hasDTD is set to true. * @param publicId - Public ID of DTD * @param systemId - System ID of DTD * @return InputSource of DTD */ public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { //Debug.logInfo("resolving XML entity with publicId [" + publicId + "], systemId [" + systemId + "]", module); hasDTD = false; String dtd = UtilProperties.getSplitPropertyValue(UtilURL.fromResource("localdtds.properties"), publicId); if (UtilValidate.isNotEmpty(dtd)) { if (Debug.verboseOn()) Debug.logVerbose("[UtilXml.LocalResolver.resolveEntity] resolving DTD with publicId [" + publicId + "], systemId [" + systemId + "] and the dtd file is [" + dtd + "]", module); try { URL dtdURL = UtilURL.fromResource(dtd); if (dtdURL == null) { throw new GeneralException("Local DTD not found - " + dtd); } InputStream dtdStream = dtdURL.openStream(); InputSource inputSource = new InputSource(dtdStream); inputSource.setPublicId(publicId); hasDTD = true; if (Debug.verboseOn()) Debug.logVerbose("[UtilXml.LocalResolver.resolveEntity] got LOCAL DTD input source with publicId [" + publicId + "] and the dtd file is [" + dtd + "]", module); return inputSource; } catch (Exception e) { Debug.logWarning(e, module); } } else { // nothing found by the public ID, try looking at the systemId, or at least the filename part of it and look for that on the classpath int lastSlash = systemId.lastIndexOf("/"); String filename = null; if (lastSlash == -1) { filename = systemId; } else { filename = systemId.substring(lastSlash + 1); } URL resourceUrl = UtilURL.fromResource(filename); if (resourceUrl != null) { InputStream resStream = resourceUrl.openStream(); InputSource inputSource = new InputSource(resStream); if (UtilValidate.isNotEmpty(publicId)) { inputSource.setPublicId(publicId); } hasDTD = true; if (Debug.verboseOn()) Debug.logVerbose("[UtilXml.LocalResolver.resolveEntity] got LOCAL DTD/Schema input source with publicId [" + publicId + "] and the file/resource is [" + filename + "]", module); return inputSource; } else { Debug.logWarning("[UtilXml.LocalResolver.resolveEntity] could not find LOCAL DTD/Schema with publicId [" + publicId + "] and the file/resource is [" + filename + "]", module); return null; } } //Debug.logInfo("[UtilXml.LocalResolver.resolveEntity] local resolve failed for DTD with publicId [" + // publicId + "] and the dtd file is [" + dtd + "], trying defaultResolver", module); return defaultResolver.resolveEntity(publicId, systemId); } /** * Returns the boolean value to inform id DTD was found in the XML file or not * @return boolean - true if DTD was found in XML */ public boolean hasDTD() { return hasDTD; } } /** Local error handler for entity resolver to DocumentBuilder parser. * Error is printed to output just if DTD was detected in the XML file. */ public static class LocalErrorHandler implements ErrorHandler { private String docDescription; private LocalResolver localResolver; public LocalErrorHandler(String docDescription, LocalResolver localResolver) { this.docDescription = docDescription; this.localResolver = localResolver; } public void error(SAXParseException exception) { if (localResolver.hasDTD()) { Debug.logError("XmlFileLoader: File " + docDescription + " process error. Line: " + String.valueOf(exception.getLineNumber()) + ". Error message: " + exception.getMessage(), module ); } } public void fatalError(SAXParseException exception) { if (localResolver.hasDTD()) { Debug.logError("XmlFileLoader: File " + docDescription + " process fatal error. Line: " + String.valueOf(exception.getLineNumber()) + ". Error message: " + exception.getMessage(), module ); } } public void warning(SAXParseException exception) { if (localResolver.hasDTD()) { Debug.logError("XmlFileLoader: File " + docDescription + " process warning. Line: " + String.valueOf(exception.getLineNumber()) + ". Error message: " + exception.getMessage(), module ); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -