加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML Utility

发布时间:2020-12-15 23:09:59 所属栏目:百科 来源:网络整理
导读:packagesample;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.io.IOException;importjava.io.OutputStream;importjava.io.StringReader;importjava.io.Writer;importjavax.xml.parsers.DocumentBuilder;importjavax
packagesample;

importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.io.StringReader;
importjava.io.Writer;

importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.ParserConfigurationException;
importjavax.xml.transform.OutputKeys;
importjavax.xml.transform.Transformer;
importjavax.xml.transform.TransformerException;
importjavax.xml.transform.TransformerFactory;
importjavax.xml.transform.dom.DOMResult;
importjavax.xml.transform.dom.DOMSource;
importjavax.xml.transform.stream.StreamResult;
importjavax.xml.transform.stream.StreamSource;

importorg.w3c.dom.DOMException;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.Node;
importorg.w3c.dom.NodeList;
importorg.xml.sax.InputSource;
importorg.xml.sax.SAXException;

/**
*XMLutilityclass.
*
*@author$Author:LihongGao$
*/
publicfinalclassXMLUtil{

/**Hidedefaultconstructor*/
privateXMLUtil(){
}

/**
*SelectssinglenodespecifiedbytheXPathexpression.
*
*@paramcurrent
*XPathqueryrootnode
*@paramxpath
*XPathexpression
*@returnSelectednode
*@throwsAIUException
*Indicatesmorethanonenodesareselected
*/
publicstaticNodeselectSingleNode(Nodecurrent,Stringxpath)
throwsException{
//finalStringmethod="selectSingleNode(Node,String)";

NodeListlist=selectNodes(current,xpath);
if(list==null||list.getLength()==0){
returnnull;
}elseif(list.getLength()==1){
returnlist.item(0);
}else{
thrownewException("Morethanonenodesareselected");
}
}

/**
*SelectslistofnodesspecifiedbytheXPathexpression.
*
*@paramcurrent
*XPathqueryrootnode
*@paramxpath
*XPathexpression
*@returnSelectednodelist
*@throwsAIUException
*IndicatesXMLtransformfailure
*/
publicstaticNodeListselectNodes(Nodecurrent,Stringxpath)
throwsException{
//finalStringmethod="selectNodes(Node,String)";

if(currentinstanceofElement&&xpath.indexOf('/')==-1
&&xpath.indexOf('[')==-1){
return((Element)current).getElementsByTagName(xpath);
}else{
StringxltString="<?xmlversion="1.0"encoding="utf-8"?>"
+"<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">"
+"<xsl:outputversion="1.0"method="xml"encoding="utf-8"/>"
+"<xsl:templatematch=""+xpath+"">"
+"<xsl:copy-ofselect="."/>"+"</xsl:template>"
+"<xsl:templatematch="text()"/>"+"</xsl:stylesheet>";

try{
Elementresult=(Element)current.cloneNode(false);
StreamSourcetemplate=newStreamSource(newStringReader(
xltString));

TransformerFactorytransformerFactory=TransformerFactory
.newInstance();
Transformertransformer=transformerFactory
.newTransformer(template);
transformer.transform(newDOMSource(current),newDOMResult(
result));
returnresult.getChildNodes();
}catch(TransformerExceptionex){
thrownewException(ex.getMessage(),ex);
}
}
}

/**
*Retrievestextnodevaluesastextrecursively.
*
*@paramroot
*Rootnode
*@paramxpath
*XPathexpression
*@returnStringrepresentationoftextnodes
*@throwsException
*Indicatesmorethanonenodesareselected
*/
publicstaticStringgetTextValue(Noderoot,Stringxpath)throwsException{
StringBufferbuf=newStringBuffer();

Nodenode=selectSingleNode(root,xpath);
if(node==null){
returnnull;
}

NodeListchildren=node.getChildNodes();
for(inti=0;i<children.getLength();i++){
Nodechild=children.item(i);
if(child.getNodeType()==Node.TEXT_NODE){
buf.append(child.getNodeValue());
}
}

returnbuf.toString();
}

/**
*Removesallelementsspecifiedbyelementname.
*
*@paramnode
*Nodetomodify
*@paramname
*Elementname
*/
publicstaticvoidremoveNode(Nodenode,Stringname){
NodeListnodes=((Element)node).getElementsByTagName(name);
if(nodes!=null){
for(inti=0;i<nodes.getLength();i++){
node.removeChild(nodes.item(i));
}
}
}

/**
*ExportsDOMnodetreetospecifiedoutputstream.
*
*@paramroot
*Rootnode
*@paramout
*Outputwriter
*@throwsException
*Indicatesfailedtoexportnodes
*/
publicstaticvoidexportNodes(Noderoot,Writerout)throwsException{
exportNodes(root,newStreamResult(out));
}

/**
*ExportsDOMnodetreetospecifiedoutputstream.
*
*@paramroot
*Rootnode
*@paramout
*Outputstream
*@throwsException
*Indicatesfailedtoexportnodes
*/
publicstaticvoidexportNodes(Noderoot,OutputStreamout)
throwsException{
exportNodes(root,newStreamResult(out));
}

/**
*ExportsDOMnodetreetospecifiedoutputstream.
*
*@paramroot
*Rootnode
*@paramresult
*Result
*@throwsException
*Indicatesfailedtoexportnodes
*/
publicstaticvoidexportNodes(Noderoot,StreamResultresult)
throwsException{
//finalStringmethod="exportNodes(Node,OutputStream)";
finalStringxltString="<?xmlversion="1.0"encoding="Shift_JIS"?>"
+"<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">"
+"<xsl:outputmethod="xml"version="1.0"encoding="Shift_JIS"omit-xml-declaration="yes"/>"
+"<xsl:templatematch="*">"
+"<xsl:copy-ofselect="."/>"
+"</xsl:template>"+"</xsl:stylesheet>";

try{
StreamSourcetemplate=newStreamSource(
newStringReader(xltString));
TransformerFactoryfactory=TransformerFactory.newInstance();
Transformertransformer=factory.newTransformer(template);
transformer.setOutputProperty(OutputKeys.ENCODING,"Shift_JIS");
transformer.transform(newDOMSource(root),result);
}catch(TransformerExceptionex){
thrownewTransformerException(ex.getMessage(),ex);
}
}

/**
*ConvertsNodetoDocument.
*
*@paramnode
*Node
*@returnDocument
*@throwsException
*Indicatesfailedtoconvert.
*/
publicstaticDocumentconvertToDocument(Nodenode)throwsException{
Documentdoc=createDocument();
doc.appendChild(doc.importNode(node,true));
returndoc;
}

/**
*ConstructsnewDocument.
*
*@returnDocument
*@throwsException
*Indicatesfailedtoconvert.
*/
publicstaticDocumentcreateDocument()throwsException{
//finalStringmethod="createDocument()";
try{
DocumentBuilderFactoryfactory=DocumentBuilderFactory
.newInstance();
DocumentBuilderbuilder=factory.newDocumentBuilder();
returnbuilder.newDocument();
}catch(DOMExceptione){
thrownewDOMException(ISeverityLevels.IMPORTANT,e.getMessage());
}catch(ParserConfigurationExceptione){
thrownewParserConfigurationException(e.getMessage());
}
}

/**
*ParsesspecifiedXMLandreturnsconstructeddocument.
*
*@paramxml
*XMLtoparse
*@returnDocument
*@throwsException
*Indicatesfailedtoconvert.
*/
publicstaticDocumentparseDocument(Stringxml)throwsException{
//finalStringmethod="parseDocument(String)";
try{
DocumentBuilderFactoryfactory=DocumentBuilderFactory
.newInstance();
DocumentBuilderbuilder=factory.newDocumentBuilder();
returnbuilder.parse(newInputSource(newStringReader(xml)));
}catch(IOExceptione){
thrownewIOException(e.getMessage(),e);
}catch(DOMExceptione){
thrownewDOMException(ISeverityLevels.IMPORTANT,e.getMessage());
}catch(ParserConfigurationExceptione){
thrownewParserConfigurationException(e.getMessage());
}catch(SAXExceptione){
thrownewSAXException(e.getMessage(),e);
}
}

publicinterfaceISeverityLevels{
//severitylevelsforExceptionsandLogging
publicfinalstaticshortCRITICAL=1;
publicfinalstaticshortIMPORTANT=4;
publicfinalstaticshortWARNING=7;
publicfinalstaticshortINFORMATIONAL=10;
publicfinalstaticshortDEBUG=13;
publicfinalstaticshortVERBOSE=16;
}

publicstaticStringgetXmlString(StringinFilename)throwsException{
StringBuffersb=newStringBuffer();
BufferedReaderreader=newBufferedReader(newFileReader(newFile(
inFilename)));
try{
Stringline=null;
while((line=reader.readLine())!=null){
sb.append(line);
}
returnsb.toString();
}finally{
reader.close();
}
}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读