乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      用DOM/JDOM解析XML文件(3)

       pengyan 2006-11-30
      以前記錄過兩個(gè)自己寫的讀寫XML文件的帖子,感覺很不完善,只適合簡(jiǎn)單的應(yīng)用,無法完成更復(fù)雜高級(jí)的功能。最近正好用到一個(gè)更優(yōu)雅的,再記錄下來,以備以后查閱。
        越來越喜歡用“優(yōu)雅”這個(gè)詞來形容一段好的代碼,沒有什么好的理由,就是感覺挺好。喜歡一個(gè)詞需要理由嗎?喜歡一個(gè)東西需要理由嗎?喜歡一個(gè)人需要理由嗎?……

      import java.io.File;
      import java.io.FileWriter;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.OutputStream;
      import java.util.List;

      import org.jdom.Document;
      import org.jdom.Element;
      import org.jdom.input.SAXBuilder;
      import org.jdom.output.Format;
      import org.jdom.output.XMLOutputter;
      import org.jdom.xpath.XPath;

      /**
      * Jdom解析XML
      *
      * @FileName:XMLUtil.java
      * @author Javer.Leo (QQ:84831612)
      * @date 2006-8-16
      */
      public final class XMLUtil
      {
      /**
      * 定義xml編碼方式
      */
      public static final String ENCODE_GBK = "GBK";
      public static final String ENCODE_UTF8 = "UTF-8";
      public static final String ENCODE_UTF16 = "UTF-16";
      public static final String ENCODE_GB2312 = "gb2312";
      public static final String ENCODE_ISO8859 = "ISO8859-1";

      private static Format format = Format.getPrettyFormat();

      static {
      format.setEncoding(ENCODE_UTF8);
      }

      /**
      * Read and parse an xml document from the file at xml/sample.xml.
      * This method corresponds to the code in Listing 7.
      * @param filePath 要解析的xml文件路徑
      * @return the JDOM document parsed from the file.
      * @throws IOException
      */
      public static Document readDocument(String filePath) throws IOException {
      try {
      SAXBuilder builder = new SAXBuilder(false);
      Document anotherDocument = builder.build(new File(filePath));
      return anotherDocument;
      } catch(Exception e) {
      e.printStackTrace();
      throw new IOException(e.getMessage());
      }
      }

      /**
      * Read and parse an xml document from the file at xml/sample.xml.
      * This method corresponds to the code in Listing 7.
      * @param filePath 要解析的xml文件路徑
      * @return the JDOM document parsed from the file.
      * @throws IOException
      */
      public static Document readDocument(InputStream input) throws IOException {
      try {
      SAXBuilder builder = new SAXBuilder(false);
      Document anotherDocument = builder.build(input);
      input.close();
      return anotherDocument;
      } catch(Exception e) {
      throw new IOException(e.getMessage());
      }
      }

      /**
      * 讀取xml文件
      * @param srcFile 目標(biāo)文件
      * @return DOM對(duì)象
      * @throws IOException
      */
      public static Document readDocument(File srcFile) throws IOException {
      try {
      SAXBuilder builder = new SAXBuilder();
      Document anotherDocument = builder.build(srcFile);
      return anotherDocument;
      } catch(Exception e) {
      throw new IOException(e.getMessage());
      }
      }

      /**
      * 向指定的文檔模型添加指定元素標(biāo)識(shí)名稱的元素
      * @param document 要添加元素的文檔模型
      * @param elementName 要添加的元素標(biāo)識(shí)名稱
      * @param parentElementPath 父元素路徑
      * @return
      */
      public static void addElement(Object document,String parentElementPath,String elementName){
      try{
      Element parentElement;
      parentElement = (Element)XPath.selectSingleNode(document,parentElementPath);
      Element newElement = new Element(elementName);
      parentElement.addContent(newElement);
      } catch (Exception e1) {
      e1.printStackTrace();
      }
      }

      /**
      * 向指定的文檔模型添加已創(chuàng)建元素
      * @param document 要添加元素的文檔模型
      * @param newElement 要添加的新元素
      * @param parentElementPath 父元素路徑
      * @return
      */
      public static void addElement(Object document,String parentElementPath,Element newElement){
      try{
      Element parentElement;
      parentElement = (Element)XPath.selectSingleNode(document,parentElementPath);
      parentElement.addContent(newElement);
      } catch (Exception e1) {
      e1.printStackTrace();
      }
      }

      /**
      * 獲取指定子元素路徑的子元素列表
      * @param document the JDOM document built from Listing 2
      * @param visitedNodeName 指定要訪問的子節(jié)點(diǎn)元素名稱
      * @return 返回指定元素路徑的子元素列表
      */
      public static List getChildrenElement(Object document,String visitedNodeName) {
      List visitElements = null;
      try {
      visitElements = XPath.selectNodes(document,visitedNodeName);
      } catch (Exception e) {
      e.printStackTrace();
      }
      return visitElements;
      }

      /**
      * 獲取指定子元素路徑名稱和屬性名稱及值的元素
      * @param document the JDOM document built from Listing 2
      * @param visitedNodeName 指定要訪問的子節(jié)點(diǎn)元素名稱
      * @param attributeName 屬性名稱
      * @param attributeValue 屬性值
      * @return 返回指定的元素
      */
      public static Element getChildElement(Object document,String visitedNodeName,String attributeName,String attributeValue) {
      Element visitElement = null;
      try {
      visitElement = (Element)XPath.selectSingleNode(document,visitedNodeName+"[@"+attributeName+"=‘"+attributeValue+"‘]");
      } catch (Exception e) {
      e.printStackTrace();
      }
      return visitElement;
      }

      /**
      * 獲取指定子元素路徑名稱和屬性名稱及值的元素
      * @param document the JDOM document built from Listing 2
      * @param visitedNodeName 指定要訪問的子節(jié)點(diǎn)元素名稱
      * @return 返回指定的元素
      */
      public static Element getChildElement(Object document,String visitedNodeName) {
      Element visitElement = null;
      try {
      visitElement = (Element)XPath.selectSingleNode(document,visitedNodeName);
      } catch (Exception e) {
      e.printStackTrace();
      }
      return visitElement;
      }

      /**
      * 刪除指定元素節(jié)點(diǎn)路徑的元素
      * @param removeNodeName 要?jiǎng)h除的元素路徑
      * @param document xml文件對(duì)應(yīng)的文檔模型
      */
      public static boolean removeChildElement(Object document,String removeNodeName) {
      Element visitElement = null;
      boolean isRemoved = false;
      try {
      visitElement = (Element)XPath.selectSingleNode(document,removeNodeName);
      if(visitElement != null)
      isRemoved = visitElement.getParentElement().removeContent(visitElement);
      } catch (Exception e) {
      e.printStackTrace();
      }
      return isRemoved;
      }

      /**
      * 刪除指定屬性的元素
      * @param document xml文件對(duì)應(yīng)的文檔模型
      * @param removeNodeName 要?jiǎng)h除的節(jié)點(diǎn)元素路徑
      * @param attributeName 屬性名稱
      * @param attributeValue 屬性值
      * @return
      */
      public static boolean removeChildElement(Object document,String removeNodeName ,String attributeName,String attributeValue) {
      List removeElements = null;
      Element visitElement = null;
      boolean isRemoved = false;
      try {
      removeElements = XPath.selectNodes(document,removeNodeName+"[@"+attributeName+"=‘"+attributeValue+"‘]");
      if(removeElements != null){
      for (int i = 0; i < removeElements.size(); i++) {
      visitElement = (Element) removeElements.get(i);
      isRemoved = visitElement.getParentElement().removeContent(visitElement);
      }
      }
      } catch (Exception e) {
      e.printStackTrace();
      }
      return isRemoved;
      }

      /**
      * 將xml文檔模型輸出到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)
      * @param document 指定的xml文檔模型
      */
      public static void outputDocument(Document document) {
      format.setIndent(" ");
      format.setExpandEmptyElements(false);
      try {
      XMLOutputter outputter = new XMLOutputter(format);
      outputter.output(document, System.out);
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

      /**
      * 將xml文檔模型輸出到標(biāo)準(zhǔn)輸出設(shè)備(流)
      * @param document 指定的xml文檔模型
      */
      public static void outputDocument(Document document,OutputStream output) {
      format.setIndent(" ");
      format.setExpandEmptyElements(false);
      try {
      XMLOutputter outputter = new XMLOutputter(format);
      outputter.output(document, output);
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

      /**
      * 將xml文檔模型輸出到指定文件
      * @param document 指定的xml文檔模型
      * @param outputFilePath 輸出文件路徑
      */
      public static void outputDocumentToFile(Document document,String outputFilePath) {
      outputDocumentToFile(document,outputFilePath,ENCODE_GB2312);
      }

      /**
      * 將xml文檔模型輸出到指定文件
      * @param document 指定的xml文檔模型
      * @param outputFilePath 輸出文件路徑
      * @param encodingMode 編碼方式
      */
      public static void outputDocumentToFile(Document document,String outputFilePath,String encodingMode) {
      format.setEncoding(encodingMode);
      format.setIndent(" ");
      format.setExpandEmptyElements(false);
      FileWriter writer = null;

      try {
      XMLOutputter outputter = new XMLOutputter(format);
      writer = new FileWriter(outputFilePath);
      outputter.output(document, writer);
      writer.close();

      }catch(Exception ep) {
      ep.printStackTrace();
      }
      finally{
      try {
      if(writer != null)
      writer.close();
      } catch (IOException e1) {
      e1.printStackTrace();
      }
      }
      }

      /**
      * 將將xml文檔模型輸出到指定字符串
      * @param document 指定的xml文檔模型
      * @return 返回document的內(nèi)容
      */
      public static String outputDocumentString(Document document){

      return outputDocumentString(document,ENCODE_GBK);
      }

      /**
      * 將將xml文檔模型輸出到指定字符串
      * @param document 指定的xml文檔模型
      * @param encodingMode 編碼格式
      * @return 返回document的內(nèi)容
      */
      public static String outputDocumentString(Document document,String encodingMode){
      format.setEncoding(encodingMode);
      format.setIndent(" ");
      format.setExpandEmptyElements(false);
      XMLOutputter outputter = new XMLOutputter(format);
      return outputter.outputString(document);
      }

      /**
      * This method takes a JDOM document in memory, an xsl file at xml/car.xsl,
      * and outputs the results to stdout.
      * This method corresponds to Listing 9.
      * @param myDocument the JDOM document built from Listing 2.
      */
      // public static void executeXSL(Document myDocument) {
      // try {
      // TransformerFactory tFactory = TransformerFactory.newInstance();
      // // Make the input sources for the XML and XSLT documents
      // org.jdom.output.DOMOutputter outputter = new org.jdom.output.DOMOutputter();
      // org.w3c.dom.Document domDocument = outputter.output(myDocument);
      // javax.xml.transform.Source xmlSource = new javax.xml.transform.dom.DOMSource(domDocument);
      // StreamSource xsltSource = new StreamSource(new FileInputStream("car.xsl"));
      // //Make the output result for the finished document
      // /*
      // * Note that here we are just going to output the results to the
      // * System.out, since we don‘t actually have a HTTPResponse object
      // * in this example
      // */
      // //StreamResult xmlResult = new StreamResult(response.getOutputStream());
      // StreamResult xmlResult = new StreamResult(System.out);
      // //Get a XSLT transformer
      // Transformer transformer = tFactory.newTransformer(xsltSource);
      // //do the transform
      // transformer.transform(xmlSource, xmlResult);
      // } catch(FileNotFoundException e) {
      // e.printStackTrace();
      // } catch(TransformerConfigurationException e) {
      // e.printStackTrace();
      // } catch(TransformerException e) {
      // e.printStackTrace();
      // } catch(org.jdom.JDOMException e) {
      // e.printStackTrace();
      // }
      // }

      /**
      * 修改指定節(jié)點(diǎn)元素的屬性
      * @param document
      * @param nodePath
      * @param name
      * @param value
      */
      public static void setElementAttributeValue(Object document,String nodePath,String name,String value){
      try {
      ((Element)XPath.selectSingleNode(document,nodePath)).setAttribute(name,value);
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

      /**
      * 修改指定節(jié)點(diǎn)元素的屬性
      * @param document
      * @param nodePath
      * @param attrName
      * @param attrValue
      * @param name
      * @param value
      */
      public static void setElementAttributeValue(Object document,String nodePath,String attrName,String attrValue,String name,String value){
      nodePath +="[@" + attrName + "=‘" + attrValue + "‘]";
      setElementAttributeValue(document,nodePath,name,value);
      }
      /**
      * 修改指定節(jié)點(diǎn)元素的內(nèi)容
      * @param document
      * @param nodePath
      * @param text
      */
      public static void setElementText(Object document,String nodePath,String text){
      try {
      ((Element)XPath.selectSingleNode(document,nodePath)).setText(text);
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

      /**
      * 修改指定節(jié)點(diǎn)元素的內(nèi)容
      * @param document
      * @param nodePath
      * @param attrName
      * @param attrValue
      * @param text
      */
      public static void setElementText(Object document,String nodePath,String attrName,String attrValue,String text){
      nodePath +="[@" + attrName + "=‘" + attrValue + "‘]";
      setElementText(document,nodePath,text);
      }

      /**
      * 設(shè)置xml的編碼格式
      * @param encode
      */
      public static void setEncoding(String encode){
      format.setEncoding(encode);

      }

      /**
      * 用DTD文檔類型定義校驗(yàn)xml文檔
      * @param content
      * @return
      */
      // public static boolean validate(){
      // SAXBuilder builder = new SAXBuilder(true);
      // try{
      // // Jdom complains about the document even though it is valid
      // ByteArrayInputStream bais=new ByteArrayInputStream(content.getBytes());
      // builder.build(bais);
      // return true;
      //
      // } catch (Exception e) {
      //
      // return false;
      //
      // }
      //
      // }

      public static void main(String[] args) throws Exception
      {
      Document doc = XMLUtil.readDocument("test.xml");
      List shapes = XMLUtil.getChildrenElement(doc, "javer/leo/example");
      for(int i=0;i {
      System.out.println(XMLUtil.getChildElement(shapes.get(i), "id").getText());
      }
      }
      }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多