📄 utilxml.java
字号:
Node node = element.getFirstChild();
if (node != null) {
do {
if (node.getNodeType() == Node.ELEMENT_NODE && (childElementName == null ||
childElementName.equals(node.getNodeName()))) {
Element childElement = (Element) node;
elements.add(childElement);
}
} while ((node = node.getNextSibling()) != null);
}
return elements;
}
/** 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 {
hasDTD = false;
String dtd = UtilProperties.getSplitPropertyValue(UtilURL.fromResource("localdtds.properties"), publicId);
if (Debug.verboseOn()) Debug.logVerbose("[UtilXml.LocalResolver.resolveEntity] resolving DTD with publicId [" + publicId +
"], systemId [" + systemId + "] and the dtd file is [" + dtd + "]", module);
if (dtd != null && dtd.length() > 0) {
try {
URL dtdURL = UtilURL.fromResource(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);
}
}
if (Debug.verboseOn()) Debug.logVerbose("[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 + -