118 lines
4.0 KiB
Java
118 lines
4.0 KiB
Java
package ctbrec.io;
|
|
|
|
import java.io.IOException;
|
|
import java.io.StringReader;
|
|
import java.util.List;
|
|
|
|
import javax.xml.parsers.DocumentBuilder;
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
import javax.xml.xpath.XPath;
|
|
import javax.xml.xpath.XPathConstants;
|
|
import javax.xml.xpath.XPathExpressionException;
|
|
import javax.xml.xpath.XPathFactory;
|
|
|
|
import org.w3c.dom.Document;
|
|
import org.w3c.dom.Node;
|
|
import org.w3c.dom.NodeList;
|
|
import org.xml.sax.InputSource;
|
|
import org.xml.sax.SAXException;
|
|
|
|
public class XmlParserUtils {
|
|
|
|
public static Document parse(String xml) throws ParserConfigurationException, SAXException, IOException {
|
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
|
return builder.parse(new InputSource(new StringReader(xml)));
|
|
}
|
|
|
|
public static Node getFirstElementByTagName(Document doc, String tagName) {
|
|
NodeList list = doc.getElementsByTagName(tagName);
|
|
if (list.getLength() > 0) {
|
|
return list.item(0);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static String getTextContent(Document doc, String tagName) {
|
|
Node node = getFirstElementByTagName(doc, tagName);
|
|
if (node != null) {
|
|
return node.getTextContent();
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static String getTextContent(Node parent, String tagName) {
|
|
Node node = findChildWithTagName(parent, tagName);
|
|
if (node != null) {
|
|
return node.getTextContent();
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static Node findChildWithTagName(Node parent, String tagName) {
|
|
if (parent == null) {
|
|
return null;
|
|
}
|
|
|
|
NodeList childs = parent.getChildNodes();
|
|
for (int i = 0; i < childs.getLength(); i++) {
|
|
Node child = childs.item(i);
|
|
if (child.getNodeName().equals(tagName)) {
|
|
return child;
|
|
} else if (child.hasChildNodes()) {
|
|
Node result = findChildWithTagName(child, tagName);
|
|
if (result != null) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static void getElementsByTagName(Node parent, String tagName, List<Node> result) {
|
|
if (parent == null) {
|
|
return;
|
|
}
|
|
|
|
NodeList childs = parent.getChildNodes();
|
|
for (int i = 0; i < childs.getLength(); i++) {
|
|
Node child = childs.item(i);
|
|
if (child.getNodeName().equals(tagName)) {
|
|
result.add(child);
|
|
} else if (child.hasChildNodes()) {
|
|
getElementsByTagName(child, tagName, result);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static String getStringWithXpath(String xml, String xpath) throws XPathExpressionException {
|
|
XPath xp = XPathFactory.newInstance().newXPath();
|
|
return xp.evaluate(xpath, new InputSource(new StringReader(xml)));
|
|
}
|
|
|
|
public static String getStringWithXpath(Node node, String xpath) throws XPathExpressionException {
|
|
XPath xp = XPathFactory.newInstance().newXPath();
|
|
return xp.evaluate(xpath, node);
|
|
}
|
|
|
|
public static Node getNodeWithXpath(String xml, String xpath) throws XPathExpressionException {
|
|
XPath xp = XPathFactory.newInstance().newXPath();
|
|
return (Node) xp.evaluate(xpath, new InputSource(new StringReader(xml)), XPathConstants.NODE);
|
|
}
|
|
|
|
public static Node getNodeWithXpath(Node node, String xpath) throws XPathExpressionException {
|
|
XPath xp = XPathFactory.newInstance().newXPath();
|
|
return (Node) xp.evaluate(xpath, node, XPathConstants.NODE);
|
|
}
|
|
|
|
public static NodeList getNodeListWithXpath(String xml, String xpath) throws XPathExpressionException {
|
|
XPath xp = XPathFactory.newInstance().newXPath();
|
|
return (NodeList) xp.evaluate(xpath, new InputSource(new StringReader(xml)), XPathConstants.NODESET);
|
|
}
|
|
}
|