/** * Copyright (c) 2002 sinosoft Co. Ltd. * All right reserved. */ //******************************************************************* // Java XMLPATHTool: // Name : // Test content: // Comment : // Date : //******************************************************************** //1.得到document 对象;2.传入xpath表达式3.返回结点集 package com.sinosoft.utility; import com.sinosoft.print.func.XMLPrintTagName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.xpath.XPathAPI; 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; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * XPathAPI应用类 *
* Title: Life Information System *
** Description: *
** Copyright: Copyright (c) 2002 *
** Company: *
* * @author Kevin * @version 1.0 */ public class XMLPathTool { private static final Logger logger = LoggerFactory.getLogger(XMLPathTool.class); /* 对应的Dom树 */ private Document sourceDom; /* 对应的文件名 */ private String fileName; /** * 从一个StringReader对象中产生一个Document * * @param in * InputStream 输入流 */ public XMLPathTool(InputStream in) { this.fileName = ""; try { DocumentBuilderFactory dfactory = DocumentBuilderFactory. newInstance(); // 拒绝 DOCTYPE dfactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); // 禁止外部实体 dfactory.setFeature("http://xml.org/sax/features/external-general-entities", false); dfactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); dfactory.setNamespaceAware(true); dfactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); dfactory.setFeature("http://xml.org/sax/features/external-general-entities", false); dfactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); dfactory.setXIncludeAware(false); dfactory.setExpandEntityReferences(false); InputStreamReader strInStream = new InputStreamReader(in, "UTF-8"); sourceDom = dfactory.newDocumentBuilder().parse(new InputSource(strInStream)); } catch (Exception ex) { logger.error("程序执行异常",ex); } } /** * 获取文档的document对象。 * * @param fileName * String 输入的文件名。 * @return Document 文件名对应的document对象。 * @throws ParserConfigurationException * @throws SAXException * @throws IOException */ private static Document getDocument(String fileName) throws ParserConfigurationException, SAXException, IOException { try (FileInputStream fis = new FileInputStream(fileName)) { InputSource in = new InputSource(fis); DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); // 拒绝 DOCTYPE dfactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); // 禁止外部实体 dfactory.setFeature("http://xml.org/sax/features/external-general-entities", false); dfactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); dfactory.setNamespaceAware(true); Document doc = dfactory.newDocumentBuilder().parse(in); return doc; } } /** * 分析xpath串。 * * @param xpathString * 要进行分析的xpath表达式。 * @return 结果集。 */ public Node parseX(String xpathString) { try { if (sourceDom == null) { sourceDom = getDocument(fileName); } // xpathString = XMLPrintTagName.changeROWToR(xpathString); return XPathAPI.selectSingleNode(sourceDom.getDocumentElement(), xpathString); } catch (Exception ex) { logger.error("程序执行异常",ex); return null; } } /** * 分析xpath串。 * * @param xpathString * 要进行分析的xpath表达式。 * @return 结果集。 */ public NodeList parseN(String xpathString) { try { if (sourceDom == null) { sourceDom = getDocument(fileName); } xpathString = XMLPrintTagName.changeROWToR(xpathString); return XPathAPI.selectNodeList(sourceDom.getDocumentElement(), xpathString); } catch (Exception ex) { logger.error("程序执行异常",ex); return null; } } }