dom4j简明教程

使用dom4j需要导入jar包

jar包下载地址:http://pan.baidu.com/s/1o65jWRw

将dom4j-1.6.1.jar包导入Eclipse


 book2.xml

 

[html]  view plain  copy
 print ?
  1. xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <书架>   
  4.   <>   
  5.     <书名>JAVA书名>    
  6.     <作者>XXXXXX作者>    
  7.     <售价>23333售价>   
  8.   >    
  9.   <>   
  10.     <书名>ANDROID书名>    
  11.     <作者>XXXXXX作者>    
  12.     <售价>23333售价>   
  13.   >   
  14. 书架>  


 

解析book2.xml这个文件。

 

方法:
获取文档的根结点:

Element root = document.getRootElement();

获取某个结点的子节点

Element element = root.element();

获取某个结点下的所有子节点:
List elements = root.elements();

遍历该结点下的所有子节点
以递归的方式进行

 

[html]  view plain  copy
 print ?
  1. public class dom4j {  
  2.   
  3.     public static void main(String[] args) throws Exception {  
  4.         // method_1();  
  5.         method_2();  
  6.     }  
  7.   
  8.     private static void method_2() throws Exception {  
  9.         SAXReader reader = new SAXReader();  
  10.         Document document = reader.read("book2.xml");  
  11.         Element root = document.getRootElement();  
  12.         parse(root);  
  13.     }  
  14.   
  15.     private static void parse(Element ele) {  
  16.         // 处理当前元素包含的所有属性  
  17.         parseAttribute(ele);  
  18.         // 获取当前元素包含的所有  
  19.         List el = ele.elements();  
  20.         for (Object e : el) {  
  21.             Element element = (Element) e;  
  22.             // 如果该元素的内容不是只包含字符串  
  23.             if (!element.isTextOnly()) {  
  24.                 parse(element);  
  25.             } else {  
  26.                 // 处理当前 元素的全部属性  
  27.                 parseAttribute(element);  
  28.                 // 获取当前元素的内容  
  29.                 System.out.println(element.getQName().getName() + "-->"  
  30.                         + element.getText());  
  31.             }  
  32.         }  
  33.     }  
  34.   
  35.     /**  
  36.      * 处理元素属性  
  37.      *   
  38.      * @param ele  
  39.      */  
  40.     private static void parseAttribute(Element ele) {  
  41.         List attributes = ele.attributes();  
  42.         for (Object e : attributes) {  
  43.             Attribute attribute = (Attribute) e;  
  44.             System.out.println(ele.getQName().getName() + "元素的"  
  45.                     + attribute.getQName().getName() + "属性为"  
  46.                     + attribute.getValue());  
  47.         }  
  48.     }  
  49.   
  50.     private static void method_1() throws Exception {  
  51.         // 获取解析器  
  52.         SAXReader reader = new SAXReader();  
  53.         // 解析xml获取代表整个文档的dom对象  
  54.         Document document = reader.read("book2.xml");  
  55.         // 获取根结点  
  56.         Element rootElement = document.getRootElement();  
  57.         // 获取书名  
  58.         String bookName = rootElement.element("书").element("书名").getText();  
  59.         System.out.println("bookName--:   " + bookName);  
  60.     }  
  61.   
  62. }  


dom4j简明教程_第1张图片





ML

来自:

W3School

XML 被设计用来传输和存储数据。HTML 被设计用来显示数据。

什么是 XML?

eXtensible Markup Language

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

XML 与 HTML 的主要差异

  • XML 不是 HTML 的替代。
  • XML 和 HTML 为不同的目的而设计:
  • XML 被设计为传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息。
<note>
    <to>Georgeto>
    <from>Johnfrom>
    <heading>Reminderheading>
    <body>Don't forget the meeting!body>
note>
  • XML 不是对 HTML 的替代
  • XML 是对 HTML 的补充。
  • XML 不会替代 HTML,理解这一点很重要。在大多数 web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。

对 XML 最好的描述是:XML 是独立于软件和硬件的信息传输工具。

XML 的用途

XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。

XML 把数据从 HTML 分离。如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。通过 XML,数据能够存储在独立的 XML 文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。

XML树结构

XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。

XML 文档必须包含根元素。该元素是所有其他元素的父元素。

XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。所有元素均可拥有子元素:

<root>
  <child>
    <subchild>.....subchild>
  child>
root>

父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。

所有元素均可拥有文本内容和属性(类似 HTML 中)。

如:

根元素是 。文档中的所有 元素都被包含在 中。 元素有 4 个子元素:、< author>、<year>、<price>。</p> <pre class="prettyprint xml" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">bookstore</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">book</span> <span class="attribute" style="color:rgb(0,128,128)">category</span>=<span class="value" style="color:rgb(221,17,68)">"COOKING"</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">title</span> <span class="attribute" style="color:rgb(0,128,128)">lang</span>=<span class="value" style="color:rgb(221,17,68)">"en"</span>></span>Everyday Italian<span class="tag" style="color:rgb(0,0,128)"></<span class="title">title</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">author</span>></span>Giada De Laurentiis<span class="tag" style="color:rgb(0,0,128)"></<span class="title">author</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">year</span>></span>2005<span class="tag" style="color:rgb(0,0,128)"></<span class="title">year</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">price</span>></span>30.00<span class="tag" style="color:rgb(0,0,128)"></<span class="title">price</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">book</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">book</span> <span class="attribute" style="color:rgb(0,128,128)">category</span>=<span class="value" style="color:rgb(221,17,68)">"CHILDREN"</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">title</span> <span class="attribute" style="color:rgb(0,128,128)">lang</span>=<span class="value" style="color:rgb(221,17,68)">"en"</span>></span>Harry Potter<span class="tag" style="color:rgb(0,0,128)"></<span class="title">title</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">author</span>></span>J K. Rowling<span class="tag" style="color:rgb(0,0,128)"></<span class="title">author</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">year</span>></span>2005<span class="tag" style="color:rgb(0,0,128)"></<span class="title">year</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">price</span>></span>29.99<span class="tag" style="color:rgb(0,0,128)"></<span class="title">price</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">book</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">book</span> <span class="attribute" style="color:rgb(0,128,128)">category</span>=<span class="value" style="color:rgb(221,17,68)">"WEB"</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">title</span> <span class="attribute" style="color:rgb(0,128,128)">lang</span>=<span class="value" style="color:rgb(221,17,68)">"en"</span>></span>Learning XML<span class="tag" style="color:rgb(0,0,128)"></<span class="title">title</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">author</span>></span>Erik T. Ray<span class="tag" style="color:rgb(0,0,128)"></<span class="title">author</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">year</span>></span>2003<span class="tag" style="color:rgb(0,0,128)"></<span class="title">year</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">price</span>></span>39.95<span class="tag" style="color:rgb(0,0,128)"></<span class="title">price</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">book</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">bookstore</span>></span></code> </pre> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> XML 语法规则</h4> <ul style="padding:0px; margin:0px 0px 0.75em 25px; list-style-type:none; font-size:16px; line-height:27.2px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <li style="line-height:1.7em; list-style-type:disc">所有 XML 元素都须有关闭标签</li> <li style="line-height:1.7em; list-style-type:disc">XML 标签对大小写敏感</li> <li style="line-height:1.7em; list-style-type:disc">XML 必须正确地嵌套</li> <li style="line-height:1.7em; list-style-type:disc">XML 文档必须有根元素</li> <li style="line-height:1.7em; list-style-type:disc">XML 的属性值须加引号</li> <li style="line-height:1.7em; list-style-type:disc">实体引用</li> </ul> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th width="36%" style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 实体</th> <th width="32%" style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 引用</th> <th width="32%" style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 意义</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> <</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> <</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 小于</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> ></td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> ></td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 大于</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> &</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> &</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 和号</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> '</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> '</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 单引号</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> "</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> "</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 引号</td> </tr> </tbody> </table> <div style="font-size:16px; line-height:27.2px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <p style="margin-top:0px; margin-bottom:0.75em; line-height:1.7em; text-indent:1em"> - XML 中的注释</p> <p style="margin-top:0px; margin-bottom:0.75em; line-height:1.7em; text-indent:1em"> 在 XML 中编写注释的语法与 HTML 的语法很相似:</p> <p style="margin-top:0px; margin-bottom:0.75em; line-height:1.7em; text-indent:1em"> <!- - This is a comment - -></p> </div> <ul style="padding:0px; margin:0px 0px 0.75em 25px; list-style-type:none; font-size:16px; line-height:27.2px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <li style="line-height:1.7em; list-style-type:disc">在 XML 中,空格会被保留</li> <li style="line-height:1.7em; list-style-type:disc">XML <strong>以 LF 存储换行</strong></li> </ul> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> XPATH</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 最有用的路径表达式:</p> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th width="15%" style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 表达式</th> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 描述</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> nodename</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取此节点的所有子节点。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> /</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 从根节点选取。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> //</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> .</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取当前节点。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> ..</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取当前节点的父节点。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> @</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取属性。</td> </tr> </tbody> </table> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th width="25%" style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 路径表达式</th> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 结果</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> bookstore</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取 bookstore 元素的所有子节点。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> /bookstore</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> bookstore/book</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取属于 bookstore 的子元素的所有 book 元素。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> //book</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取所有 book 子元素,而不管它们在文档中的位置。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> bookstore//book</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> //@lang</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 选取名为 lang 的所有属性。</td> </tr> </tbody> </table> <h3 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> Java解析XML文件</h3> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> 4种解析方式</h4> <div style="font-size:16px; line-height:27.2px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <p style="margin-top:0px; margin-bottom:0.75em; line-height:1.7em; text-indent:1em"> 来自</p> http://bbs.csdn.net/topics/290027113/ </div> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> DOM(Document Object Model JAXP Crimson解析器)</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> SAX(Simple API for XML)</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> JDOM http://www.jdom.org</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> DOM4J http://dom4j.sourceforge.net</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 比较</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 1)DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM.虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。</p> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> dom4j简易教程</h4> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> 获取Document</h4> <pre class="prettyprint cs" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto">SAXReader reader = <span class="keyword" style="font-weight:bold">new</span> SAXReader(); Document document = reader.read(<span class="string" style="color:rgb(221,17,68)">"bookstore.xml"</span>);</code></pre> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> Iterator</h4> <pre><code class="language-java"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">void</span> bar(Document document) <span class="keyword" style="font-weight:bold">throws</span> DocumentException Element root = document.getRootElement(); <span class="comment" style="color:rgb(153,153,136); font-style:italic">// iterate through child elements of root</span> <span class="keyword" style="font-weight:bold">for</span> ( Iterator i = root.elementIterator(); i.hasNext(); ) { <span class="indent"> </span> Element element = (Element) i.next(); <span class="indent"> </span> <span class="comment" style="color:rgb(153,153,136); font-style:italic">// do something</span> } <span class="comment" style="color:rgb(153,153,136); font-style:italic">// iterate through child elements of root with element name "foo"</span> <span class="keyword" style="font-weight:bold">for</span> ( Iterator i = root.elementIterator( <span class="string" style="color:rgb(221,17,68)">"foo"</span> ); i.hasNext(); ) { <span class="indent"> </span> Element foo = (Element) i.next(); <span class="indent"> </span> <span class="comment" style="color:rgb(153,153,136); font-style:italic">// do something</span> } <span class="comment" style="color:rgb(153,153,136); font-style:italic">// iterate through attributes of root</span> <span class="keyword" style="font-weight:bold">for</span> ( Iterator i = root.attributeIterator(); i.hasNext(); ) { <span class="indent"> </span> Attribute attribute = (Attribute) i.next(); <span class="indent"> </span> <span class="comment" style="color:rgb(153,153,136); font-style:italic">// do something</span> } }</code> </code></pre> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> XPath表达式</h4> <pre class="prettyprint cs" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> main(String[] args) throws DocumentException { <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"Hello World!"</span>); <span class="indent"> </span>SAXReader sax = <span class="keyword" style="font-weight:bold">new</span> SAXReader(); <span class="indent"> </span>Document document = sax.read(<span class="string" style="color:rgb(221,17,68)">"bookstore.xml"</span>); <span class="indent"> </span>List<Node> list = document.selectNodes( <span class="string" style="color:rgb(221,17,68)">"//book/title"</span> ); <span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span>(Node n : list){ <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"======================="</span>); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"节点名:"</span> + n.getName()); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"节点值:"</span> + n.getText()); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"节点XPath:"</span> + n.getPath()); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"节点属性lang值:"</span> + n.valueOf(<span class="string" style="color:rgb(221,17,68)">"@lang"</span>)); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"节点所属的xml文档对象:"</span> +n.getDocument().equals(document)); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"节点父亲名字:"</span> + n.getParent().getQName().getName()); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"节点类型:"</span> + n.getNodeTypeName()); <span class="indent"> </span>} <span class="indent"> </span>Node node = document.selectSingleNode( <span class="string" style="color:rgb(221,17,68)">"/bookstore/book"</span> ); <span class="indent"> </span>String name = node.valueOf( <span class="string" style="color:rgb(221,17,68)">"@category"</span> ); <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(name); <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(node.getDocument()); }</code> </pre> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> 快速遍历</h4> <pre class="prettyprint cs" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> main(String[] args) throws DocumentException { <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"Hello World!"</span>); <span class="indent"> </span>SAXReader sax = <span class="keyword" style="font-weight:bold">new</span> SAXReader(); <span class="indent"> </span>Document document = sax.read(<span class="string" style="color:rgb(221,17,68)">"bookstore.xml"</span>); <span class="indent"> </span>Element root = document.getRootElement(); <span class="indent"> </span>DFS(root); } <span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> DFS(Element e){ <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(e.getQName().getName()+<span class="string" style="color:rgb(221,17,68)">"------------"</span>+e.getNodeTypeName()); <span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span> ( <span class="keyword" style="font-weight:bold">int</span> i = <span class="number" style="color:rgb(0,153,153)">0</span>, size = e.nodeCount(); i < size; i++ ) { <span class="indent"> </span><span class="indent"> </span>Node node = e.node(i); <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">if</span> ( node instanceof Element ) { <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>DFS( (Element) node ); <span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">else</span> { <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">if</span>(node.getText().trim().length() > <span class="number" style="color:rgb(0,153,153)">0</span>){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(node.getNodeTypeName()+<span class="string" style="color:rgb(221,17,68)">"-------------"</span> + node.getText().trim()); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span>} }</code> </pre> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> </p> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> 制作新XML文件</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 从零开始制作XML</p> <pre class="prettyprint cs" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> main(String[] args) throws Exception { <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"Hello World!"</span>); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//1. 创建Document对象</span> <span class="indent"> </span>Document document = createDocument(); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//2. 将Document写入文件,两种方式,简洁方式和美观方式</span> <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//2.1 简洁方式,设置OutputFormat为compact</span> <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//2.2 美观方式,设置OutputFormat为pretty</span> <span class="indent"> </span>write(document); } <span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> Document createDocument(){ <span class="indent"> </span>Document document = DocumentHelper.createDocument(); <span class="indent"> </span>Element root = document.addElement(<span class="string" style="color:rgb(221,17,68)">"root"</span>); <span class="indent"> </span>Element author1 = root.addElement( <span class="string" style="color:rgb(221,17,68)">"author"</span> ) <span class="indent"> </span><span class="indent"> </span>.addAttribute( <span class="string" style="color:rgb(221,17,68)">"name"</span>, <span class="string" style="color:rgb(221,17,68)">"James"</span> ) <span class="indent"> </span><span class="indent"> </span>.addAttribute( <span class="string" style="color:rgb(221,17,68)">"location"</span>, <span class="string" style="color:rgb(221,17,68)">"UK"</span> ) <span class="indent"> </span><span class="indent"> </span>.addText( <span class="string" style="color:rgb(221,17,68)">"James Strachan"</span> ); <span class="indent"> </span>Element author2 = root.addElement( <span class="string" style="color:rgb(221,17,68)">"author"</span> ) <span class="indent"> </span><span class="indent"> </span>.addAttribute( <span class="string" style="color:rgb(221,17,68)">"name"</span>, <span class="string" style="color:rgb(221,17,68)">"Bob"</span> ) <span class="indent"> </span><span class="indent"> </span>.addAttribute( <span class="string" style="color:rgb(221,17,68)">"location"</span>, <span class="string" style="color:rgb(221,17,68)">"US"</span> ) <span class="indent"> </span><span class="indent"> </span>.addText( <span class="string" style="color:rgb(221,17,68)">"Bob McWhirter"</span> ); <span class="indent"> </span><span class="keyword" style="font-weight:bold">return</span> document; } <span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> write(Document document) throws Exception { <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">// lets write to a file</span> <span class="indent"> </span>XMLWriter writer = <span class="keyword" style="font-weight:bold">new</span> XMLWriter( <span class="keyword" style="font-weight:bold">new</span> FileWriter( <span class="string" style="color:rgb(221,17,68)">"output.xml"</span> ) ); <span class="indent"> </span>writer.write( document ); <span class="indent"> </span>writer.close(); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">// Pretty print the document to System.out</span> <span class="indent"> </span>OutputFormat format = OutputFormat.createPrettyPrint(); <span class="indent"> </span>writer = <span class="keyword" style="font-weight:bold">new</span> XMLWriter( System.<span class="keyword" style="font-weight:bold">out</span>, format ); <span class="indent"> </span>writer.write( document ); <span class="indent"> </span>writer.close(); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">// Compact format to System.out</span> <span class="indent"> </span>format = OutputFormat.createCompactFormat(); <span class="indent"> </span>writer = <span class="keyword" style="font-weight:bold">new</span> XMLWriter( System.<span class="keyword" style="font-weight:bold">out</span>, format ); <span class="indent"> </span>writer.write( document ); <span class="indent"> </span>writer.close(); }</code> </pre> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> 字符串与XML互换</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 实现字符串和XML文件之间的转换</p> <pre class="prettyprint cs" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> main(String[] args) throws Exception { <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"Hello World!"</span>); <span class="indent"> </span>SAXReader sax = <span class="keyword" style="font-weight:bold">new</span> SAXReader(); <span class="indent"> </span>Document document = sax.read(<span class="string" style="color:rgb(221,17,68)">"bookstore.xml"</span>); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//将XML文件转成string</span> <span class="indent"> </span>String str = document.asXML(); <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(str); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//删除换行</span> <span class="indent"> </span>str = str.replaceAll(<span class="string" style="color:rgb(221,17,68)">"[\n]"</span>,<span class="string" style="color:rgb(221,17,68)">""</span>); <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(str); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//将string转换成document对象,然后写入XML文件</span> <span class="indent"> </span>Document document1 = DocumentHelper.parseText(str); <span class="indent"> </span>XMLWriter writer = <span class="keyword" style="font-weight:bold">new</span> XMLWriter(<span class="keyword" style="font-weight:bold">new</span> FileWriter(<span class="string" style="color:rgb(221,17,68)">"stringToXML.xml"</span>)); <span class="indent"> </span>writer.write(document1); <span class="indent"> </span>writer.flush(); <span class="indent"> </span>writer.close(); }</code> </pre> <h3 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> 实例</h3> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 将一个XML文件转换成类对象1、创建xml文件</p> <pre class="prettyprint xml" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="pi" style="color:rgb(153,153,153); font-weight:bold"><?xml version="1.0" ?></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">root</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">Book</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">category</span>></span>COOKING<span class="tag" style="color:rgb(0,0,128)"></<span class="title">category</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">title</span>></span>Everyday Italian<span class="tag" style="color:rgb(0,0,128)"></<span class="title">title</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">author</span>></span>Giada De Laurentiis<span class="tag" style="color:rgb(0,0,128)"></<span class="title">author</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">year</span>></span>2005<span class="tag" style="color:rgb(0,0,128)"></<span class="title">year</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">price</span>></span>30.00<span class="tag" style="color:rgb(0,0,128)"></<span class="title">price</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">Book</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">Book</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">category</span>></span>CHILDREN<span class="tag" style="color:rgb(0,0,128)"></<span class="title">category</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">title</span> <span class="attribute" style="color:rgb(0,128,128)">lang</span>=<span class="value" style="color:rgb(221,17,68)">"en"</span>></span>Harry Potter<span class="tag" style="color:rgb(0,0,128)"></<span class="title">title</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">author</span>></span>J K. Rowling<span class="tag" style="color:rgb(0,0,128)"></<span class="title">author</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">year</span>></span>2005<span class="tag" style="color:rgb(0,0,128)"></<span class="title">year</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">price</span>></span>29.99<span class="tag" style="color:rgb(0,0,128)"></<span class="title">price</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">Book</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">Book</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">category</span>></span>WEB<span class="tag" style="color:rgb(0,0,128)"></<span class="title">category</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">title</span> <span class="attribute" style="color:rgb(0,128,128)">lang</span>=<span class="value" style="color:rgb(221,17,68)">"en"</span>></span>Learning XML<span class="tag" style="color:rgb(0,0,128)"></<span class="title">title</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">author</span>></span>Erik T. Ray<span class="tag" style="color:rgb(0,0,128)"></<span class="title">author</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">year</span>></span>2003<span class="tag" style="color:rgb(0,0,128)"></<span class="title">year</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">price</span>></span>39.95<span class="tag" style="color:rgb(0,0,128)"></<span class="title">price</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">Book</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">root</span>></span></code></pre> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 2、编写java bean文件3、转换类</p> <pre class="prettyprint cs" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">class</span> XMLToClass { <span class="indent"> </span><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> main(String[] args) <span class="indent"> </span>{ <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"Hello World!"</span>); <span class="indent"> </span><span class="indent"> </span>readXML(<span class="string" style="color:rgb(221,17,68)">"classXML.xml"</span>); <span class="indent"> </span>} <span class="indent"> </span><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> readXML(String xmlFileName) { <span class="indent"> </span><span class="indent"> </span>SAXReader sax = <span class="keyword" style="font-weight:bold">new</span> SAXReader(); <span class="indent"> </span><span class="indent"> </span>Document document = <span class="keyword" style="font-weight:bold">null</span>; <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">try</span>{ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>document = sax.read(xmlFileName); <span class="indent"> </span><span class="indent"> </span>}<span class="keyword" style="font-weight:bold">catch</span>(DocumentException dex){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>dex.printStackTrace(); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"获取Document对象失败"</span>); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">return</span>; <span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span>Element root = document.getRootElement(); <span class="indent"> </span><span class="indent"> </span>List<Element> objs = root.elements(); <span class="indent"> </span><span class="indent"> </span>List<Element> properties = <span class="keyword" style="font-weight:bold">null</span>; <span class="indent"> </span><span class="indent"> </span>String className = <span class="string" style="color:rgb(221,17,68)">""</span>; <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">if</span>(objs.size() > <span class="number" style="color:rgb(0,153,153)">0</span>){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取类名</span> <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>className = objs.<span class="keyword" style="font-weight:bold">get</span>(<span class="number" style="color:rgb(0,153,153)">0</span>).getQName().getName(); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>properties = objs.<span class="keyword" style="font-weight:bold">get</span>(<span class="number" style="color:rgb(0,153,153)">0</span>).elements(); <span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"类名:"</span> + className); <span class="indent"> </span><span class="indent"> </span>List<String> pros = <span class="keyword" style="font-weight:bold">new</span> ArrayList<String>(); <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span>(<span class="keyword" style="font-weight:bold">int</span> i = <span class="number" style="color:rgb(0,153,153)">0</span> ; i < properties.size(); i ++){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"属性"</span>+i+<span class="string" style="color:rgb(221,17,68)">":"</span>+properties.<span class="keyword" style="font-weight:bold">get</span>(i).getQName().getName()); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>pros.add(properties.<span class="keyword" style="font-weight:bold">get</span>(i).getQName().getName()); <span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(pros); <span class="indent"> </span><span class="indent"> </span>List<Object> list = createObject(className,objs); <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span>(Object o : list){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(o); <span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span>} <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">/* <span class="indent"> </span>* 根据类名,属性值构造对象 <span class="indent"> </span>*/</span> <span class="indent"> </span><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> List<Object> createObject(String className,List<Element> objNodes){ <span class="indent"> </span><span class="indent"> </span>Class clazz = <span class="keyword" style="font-weight:bold">null</span>; <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">try</span>{ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>clazz = Class.forName(className); <span class="indent"> </span><span class="indent"> </span>}<span class="keyword" style="font-weight:bold">catch</span>(ClassNotFoundException cnfe){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(className + <span class="string" style="color:rgb(221,17,68)">"没有找到!"</span>); <span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span>List<Object> objs = <span class="keyword" style="font-weight:bold">new</span> ArrayList<Object>(); <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span>(<span class="keyword" style="font-weight:bold">int</span> i = <span class="number" style="color:rgb(0,153,153)">0</span>; i < objNodes.size(); i++){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>List<Element> properties = objNodes.<span class="keyword" style="font-weight:bold">get</span>(i).elements(); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">try</span>{ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>Object obj = clazz.newInstance(); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span>(<span class="keyword" style="font-weight:bold">int</span> j = <span class="number" style="color:rgb(0,153,153)">0</span>; j < properties.size(); j ++){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>Element e = properties.<span class="keyword" style="font-weight:bold">get</span>(j); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>Field field = clazz.getDeclaredField(e.getQName().getName()); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>field.setAccessible(<span class="keyword" style="font-weight:bold">true</span>); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取域的类型,需要选择field的set方法</span> <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>String type = field.getType().getName(); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">if</span>(<span class="string" style="color:rgb(221,17,68)">"int"</span>.equals(type)){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>field.setInt(obj,Integer.parseInt(e.getText().trim())); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>}<span class="keyword" style="font-weight:bold">else</span> <span class="keyword" style="font-weight:bold">if</span>(<span class="string" style="color:rgb(221,17,68)">"double"</span>.equals(type)){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>field.setDouble(obj,Double.parseDouble(e.getText().trim())); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>}<span class="keyword" style="font-weight:bold">else</span>{ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>field.<span class="keyword" style="font-weight:bold">set</span>(obj,e.getText().trim()); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>objs.add(obj); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>}<span class="keyword" style="font-weight:bold">catch</span>(InstantiationException ie){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"实例化类失败!"</span>); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>}<span class="keyword" style="font-weight:bold">catch</span>(NoSuchFieldException nse){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"找不到指定的数据域!"</span>); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>}<span class="keyword" style="font-weight:bold">catch</span>(IllegalAccessException iae){ <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"底层字段是不可访问的!"</span>); <span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span>} <span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight:bold">return</span> objs; <span class="indent"> </span>} }</code> </pre> <h3 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> 相关类和接口</h3> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> </p> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> Document</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 实现了Node接口</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 获取根元素Element getRootElement()</p> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> Element</h4> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 方法</th> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 意义</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Iterator elementIterator()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回一个包含子元素的迭代器</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> List elements()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回子元素列表</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Element element(String name)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 根据name获取Element</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> QName getQName()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 获取元素的QName名字</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> int attributeCount()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 获取属性个数</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Attribute attribute(int index)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 第index个属性</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> getText()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 如果元素有值,则获取值</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> String elementText(String name)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 获取值</td> </tr> </tbody> </table> <pre class="prettyprint cs" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="keyword" style="font-weight:bold">public</span> <span class="keyword" style="font-weight:bold">static</span> <span class="keyword" style="font-weight:bold">void</span> main(String[] args) throws DocumentException { <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"Hello World!"</span>); <span class="indent"> </span>SAXReader sax = <span class="keyword" style="font-weight:bold">new</span> SAXReader(); <span class="indent"> </span>Document document = sax.read(<span class="string" style="color:rgb(221,17,68)">"bookstore.xml"</span>); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取xml的根元素</span> <span class="indent"> </span>Element root = document.getRootElement(); <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(root.getQName().getName()); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取指定的元素,根据QName或者name</span> <span class="indent"> </span>Element foo = root.element(<span class="string" style="color:rgb(221,17,68)">"foo"</span>); <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取元素的属性个数</span> <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"属性个数:"</span> + foo.attributeCount()); <span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span>(<span class="keyword" style="font-weight:bold">int</span> i = <span class="number" style="color:rgb(0,153,153)">0</span>; i < foo.attributeCount(); i++){ <span class="indent"> </span><span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取元素的属性,三种方式QName,Name,Index</span> <span class="indent"> </span><span class="indent"> </span>Attribute a = foo.attribute(i); <span class="indent"> </span><span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取属性值</span> <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(a.getQName().getName() + <span class="string" style="color:rgb(221,17,68)">"="</span> + a.getValue()); <span class="indent"> </span>} <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取属性列表</span> <span class="indent"> </span>List<Attribute> list = foo.attributes(); <span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span>(Attribute a : list){ <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(a.getQName().getName() + <span class="string" style="color:rgb(221,17,68)">"="</span> + a.getValue()); <span class="indent"> </span>} <span class="indent"> </span><span class="comment" style="color:rgb(153,153,136); font-style:italic">//获取指定属性名的值</span> <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"color:"</span>+foo.attributeValue(<span class="string" style="color:rgb(221,17,68)">"color"</span>)); <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(<span class="string" style="color:rgb(221,17,68)">"================================"</span>); <span class="indent"> </span>List<Element> list1 = root.elements(<span class="string" style="color:rgb(221,17,68)">"book"</span>); <span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(); <span class="indent"> </span><span class="keyword" style="font-weight:bold">for</span>(Element e : list1){ <span class="indent"> </span><span class="indent"> </span>Element child = e.element(<span class="string" style="color:rgb(221,17,68)">"title"</span>); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(child.getText()); <span class="indent"> </span><span class="indent"> </span>System.<span class="keyword" style="font-weight:bold">out</span>.println(e.elementText(<span class="string" style="color:rgb(221,17,68)">"title"</span>)); <span class="indent"> </span>} }</code> </pre> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> Attribute</h4> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th width="35%" style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 方法</th> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 意义</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> QName getQName()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回属性名QName()</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> String getValue()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 获取属性值</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> void setValue(String value)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 设置属性值,若是只读则抛出异常UnsupportedOperationException</td> </tr> </tbody> </table> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> QName</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> Namespace getNamespace()String getName()</p> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> SAXReader</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 读取xml文件read</p> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> Node</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 接口类型</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 最好熟悉XPath语法</p> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 方法</th> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 意义</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Document getDocument()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> String getName()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回Node名</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> String getText()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回节点的文本内容,最好再使用string的trim()方法删除两端的换行符</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Element getParent()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回父节点</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> short getNodeType()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回节点类型整数值</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> String getNodeTypeName()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回节点类型</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> List selectNodes(String xpathExpression)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 返回Node列表</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> write(Writer writer)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> </tbody> </table> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> Branch</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 接口类型</p> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 定义了节点的共同行为</p> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th width="35%" style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 方法</th> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 意义</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> int indexOf(Node node)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Node node(int index)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> int nodeCount()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Iterator nodeIterator()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> void add(Comment comment)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Adds the given Comment to this branch.</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> void add(Element element)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Adds the given Element to this branch.</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> void add(Node node)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Adds the given Node or throws IllegalAddException if the given node is not of a valid type.</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Element addElement(String name)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Adds a new Element node with the given name to this branch and returns a reference to the new node.</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> boolean remove(Comment comment)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Removes the given Comment if the node is an immediate child of this branch.</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> boolean remove(Element element)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Removes the given Element if the node is an immediate child of this branch.</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> boolean remove(Node node)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> Removes the given Node if the node is an immediate child of this branch.</td> </tr> </tbody> </table> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> XMLWriter</h4> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 方法</th> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 意义</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> XMLWriter()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 默认是简洁输出</td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> XMLWriter(OutputFormat format)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> XMLWriter(OutputStream out)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> XMLWriter(OutputStream out, OutputFormat format)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> XMLWriter(Writer writer)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> XMLWriter(Writer writer, OutputFormat format)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px">  </td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> void write(Document doc)</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> This will print the Document to the current Writer.</td> </tr> </tbody> </table> <h4 style="margin:0px 0px 0.5em; font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; line-height:1.6em; color:rgb(51,51,51); font-size:18px; text-indent:1em; background-color:rgb(254,254,254)"> OutputFormat</h4> <p style="margin-top:0px; margin-bottom:0.75em; font-size:16px; line-height:27.2px; text-indent:1em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> 输出样式控制</p> <table class="table table-bordered " style="max-width:100%; border-spacing:0px; width:605.455px; margin-bottom:1.5em; border-width:1px 1px 1px 0px; border-top-style:solid; border-right-style:solid; border-bottom-style:solid; border-top-color:rgb(221,221,221); border-right-color:rgb(221,221,221); border-bottom-color:rgb(221,221,221); font-size:14px; line-height:1.3em; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Tahoma,Arial,STXihei,'Microsoft YaHei',微软雅黑,sans-serif; background-color:rgb(254,254,254)"> <thead> <tr style="line-height:1.3em"> <th width="35%" style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 方法</th> <th style="padding:8px; line-height:1.5em; vertical-align:bottom; border-top-width:0px; border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221)"> 意义</th> </tr> </thead> <tbody> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> static OutputFormat createCompactFormat()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 简洁输出,没有添加为了美观的换行符,如: <code style="padding:2px 4px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:none; background-color:rgb(247,247,249)"><root><author name="James" location="UK">James Strachan</author><author name="Bob" location="US">Bob McWhirter</author></root></code></td> </tr> <tr style="line-height:1.3em"> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> static OutputFormat createPrettyPrint()</td> <td style="padding:8px; line-height:1.3em; vertical-align:top; border-top-width:1px; border-top-style:solid; border-top-color:rgb(221,221,221); border-left-width:1px; border-left-style:solid; border-left-color:rgb(221,221,221); font-size:14px"> 美观输出,如下面所示</td> </tr> </tbody> </table> <pre class="prettyprint xml" style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; color:rgb(51,51,51); margin-top:0px; margin-bottom:1.5em; line-height:1.5em; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; overflow-y:auto; background-color:rgb(246,246,246)"><code style="padding:0.3em; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; border:0px; display:block; overflow-y:auto"><span class="tag" style="color:rgb(0,0,128)"><<span class="title">root</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">author</span> <span class="attribute" style="color:rgb(0,128,128)">name</span>=<span class="value" style="color:rgb(221,17,68)">"James"</span> <span class="attribute" style="color:rgb(0,128,128)">location</span>=<span class="value" style="color:rgb(221,17,68)">"UK"</span>></span>James Strachan<span class="tag" style="color:rgb(0,0,128)"></<span class="title">author</span>></span> <span class="tag" style="color:rgb(0,0,128)"><<span class="title">author</span> <span class="attribute" style="color:rgb(0,128,128)">name</span>=<span class="value" style="color:rgb(221,17,68)">"Bob"</span> <span class="attribute" style="color:rgb(0,128,128)">location</span>=<span class="value" style="color:rgb(221,17,68)">"US"</span>></span>Bob McWhirter<span class="tag" style="color:rgb(0,0,128)"></<span class="title">author</span>></span> <span class="tag" style="color:rgb(0,0,128)"></<span class="title">root</span>></span></code></pre> <br> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1707095171797168128"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(java,web,dom,xml,dom4j,java,android)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950232820773351424.htm" title="移动端城市区县二级联动选择功能实现包" target="_blank">移动端城市区县二级联动选择功能实现包</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery</div> </li> <li><a href="/article/1950230804957294592.htm" title="SpringMVC执行流程(原理),通俗易懂" target="_blank">SpringMVC执行流程(原理),通俗易懂</a> <span class="text-muted">国服冰</span> <a class="tag" taget="_blank" href="/search/SpringMVC/1.htm">SpringMVC</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a> <div>SpringMVC执行流程(原理),通俗易懂一、图解SpringMVC流程二、进一步理解Springmvc的执行流程1、导入依赖2、建立展示的视图3、web.xml4、spring配置文件springmvc-servlet5、Controller6、tomcat配置7、访问的url8、视图页面一、图解SpringMVC流程图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提</div> </li> <li><a href="/article/1950228031117258752.htm" title="深入解析JVM工作原理:从字节码到机器指令的全过程" target="_blank">深入解析JVM工作原理:从字节码到机器指令的全过程</a> <span class="text-muted"></span> <div>一、JVM概述Java虚拟机(JVM)是Java平台的核心组件,它实现了Java"一次编写,到处运行"的理念。JVM是一个抽象的计算机器,它有自己的指令集和运行时内存管理机制。JVM的主要职责:加载:读取.class文件并验证其正确性存储:管理内存分配和垃圾回收执行:解释或编译字节码为机器指令安全:提供沙箱环境限制恶意代码二、JVM架构详解JVM由三个主要子系统组成:1.类加载子系统类加载过程分为</div> </li> <li><a href="/article/1950226517397139456.htm" title="JVM 内存模型深度解析:原子性、可见性与有序性的实现" target="_blank">JVM 内存模型深度解析:原子性、可见性与有序性的实现</a> <span class="text-muted">练习时长两年半的程序员小胡</span> <a class="tag" taget="_blank" href="/search/JVM/1.htm">JVM</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%89%96%E6%9E%90%EF%BC%9A%E4%BB%8E%E9%9D%A2%E8%AF%95%E8%80%83%E7%82%B9%E5%88%B0%E7%94%9F%E4%BA%A7%E5%AE%9E%E8%B7%B5/1.htm">深度剖析:从面试考点到生产实践</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/1.htm">内存模型</a> <div>在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J</div> </li> <li><a href="/article/1950225785054883840.htm" title="Java | 多线程经典问题 - 售票" target="_blank">Java | 多线程经典问题 - 售票</a> <span class="text-muted">Ada54</span> <div>一、售票需求1)同一个票池2)多个窗口卖票,不能出售同一张票二、售票问题代码实现(线程与进程小总结,请戳:Java|线程和进程,创建线程)step1:定义SaleWindow类实现Runnable接口,覆盖run方法step2:实例化SaleWindow对象,创建Thread对象,将SaleWindow作为参数传给Thread类的构造函数,然后通过Thread.start()方法启动线程step3</div> </li> <li><a href="/article/1950225381961297920.htm" title="SpringMVC的执行流程" target="_blank">SpringMVC的执行流程</a> <span class="text-muted"></span> <div>1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,</div> </li> <li><a href="/article/1950224616647618560.htm" title="JAVA接口机结构解析" target="_blank">JAVA接口机结构解析</a> <span class="text-muted">秃狼</span> <a class="tag" taget="_blank" href="/search/SpringBoot/1.htm">SpringBoot</a><a class="tag" taget="_blank" href="/search/%E5%85%AB%E8%82%A1%E6%96%87/1.htm">八股文</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>什么是接口机在Java项目中,接口机通常指用于与外部系统进行数据交互的中间层,负责处理请求和响应的转换、协议适配、数据格式转换等任务。接口机的结构我们的接口机的结构分为两个大部分,外部接口机和内部接口机,在业务的调度上也是通过mq来实现的,只要的目的就是为了解耦合和做差异化。在接口机中主要的方法就是定时任务,消息的发送和消费,其他平台调用接口机只能提供外部接口机的方法进行调用,外部接口机可以提供消</div> </li> <li><a href="/article/1950223497875746816.htm" title="最新阿里四面面试真题46道:面试技巧+核心问题+面试心得" target="_blank">最新阿里四面面试真题46道:面试技巧+核心问题+面试心得</a> <span class="text-muted">风平浪静如码</span> <div>前言做技术的有一种资历,叫做通过了阿里的面试。这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。希望对大家帮助,祝面试成功,有个更好的职业规划。一,阿里常见技术面1、微信红包怎么实现。2、海量数据分析。3、测试职位问的线程安全和非线程安全。4、HTTP2.0、thrift。5、面试电话沟通可能先让自我介绍。6、分布式事务一致性。7、ni</div> </li> <li><a href="/article/1950221589622616064.htm" title="EasyPlayer播放器系列开发计划2025" target="_blank">EasyPlayer播放器系列开发计划2025</a> <span class="text-muted">xiejiashu</span> <a class="tag" taget="_blank" href="/search/EasyPlayer/1.htm">EasyPlayer</a><a class="tag" taget="_blank" href="/search/EasyPlayer/1.htm">EasyPlayer</a><a class="tag" taget="_blank" href="/search/EasyPlayer%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">EasyPlayer播放器</a><a class="tag" taget="_blank" href="/search/RTSP%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">RTSP播放器</a><a class="tag" taget="_blank" href="/search/js%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">js播放器</a><a class="tag" taget="_blank" href="/search/Web%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">Web播放器</a> <div>EasyPlayer系列产品发展至今,已经超过10年,从最早的EasyPlayerRTSP播放器,到如今维护的3条线:EasyPlayer-RTSP播放器:Windows、Android、iOS;EasyPlayerPro播放器:Windows、Android、iOS;EasyPlayer.js播放器:H5;这3个播放器各有各的应用场景,用户量也是巨大,像RTSP版本的播放器,到今天依然还有很多低</div> </li> <li><a href="/article/1950219166367674368.htm" title="包含日志获取webshell" target="_blank">包含日志获取webshell</a> <span class="text-muted">陈望_ning</span> <div>日志文件关闭:Apache目录下的httpd.conf文件#ErrorLog"logs/error.log"#CustomLog"logs/access.log"common加#号为注释不产生日志文件如果去掉#将会在Apache/logs/目录下产生日志文件linux:access_logerror_logwindows:access.logerror.logaccess_log每一行记录了一次网</div> </li> <li><a href="/article/1950218946015719424.htm" title="图论算法经典题目解析:DFS、BFS与拓扑排序实战" target="_blank">图论算法经典题目解析:DFS、BFS与拓扑排序实战</a> <span class="text-muted">周童學</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E4%BC%98%E5%85%88/1.htm">深度优先</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E8%AE%BA/1.htm">图论</a> <div>图论算法经典题目解析:DFS、BFS与拓扑排序实战图论问题是算法面试中的高频考点,本博客将通过四道LeetCode经典题目(均来自"Top100Liked"题库),深入讲解图论的核心算法思想和实现技巧。涵盖DFS、BFS、拓扑排序和前缀树等知识点,每道题配有Java实现和易错点分析。1.岛屿数量(DFS遍历)问题描述给定一个由'1'(陆地)和'0'(水)组成的二维网格,计算岛屿的数量。岛屿由水平或</div> </li> <li><a href="/article/1950218818781507584.htm" title="【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge" target="_blank">【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge</a> <span class="text-muted">本本本添哥</span> <a class="tag" taget="_blank" href="/search/002/1.htm">002</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E8%BF%9B%E9%98%B6%E5%BC%80%E5%8F%91%E8%83%BD%E5%8A%9B/1.htm">进阶开发能力</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、报错内容Causedby:com.yomahub.liteflow.exception.ChainDuplicateException:[chainnameduplicate]chainName=categoryChallengeatcom.yomahub.liteflow.parser.helper.ParserHelper.lambda$null$0(ParserHelper.java:1</div> </li> <li><a href="/article/1950218314064130048.htm" title="Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)" target="_blank">Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)</a> <span class="text-muted">bug菌¹</span> <a class="tag" taget="_blank" href="/search/Java%E5%AE%9E%E6%88%98%28%E8%BF%9B%E9%98%B6%E7%89%88%29/1.htm">Java实战(进阶版)</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Java%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Java零基础入门</a><a class="tag" taget="_blank" href="/search/Java%E5%B9%B6%E5%8F%91/1.htm">Java并发</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E6%B1%A0/1.htm">线程池</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%AF%87/1.htm">多线程篇</a> <div>本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行</div> </li> <li><a href="/article/1950217936077647872.htm" title="Java 队列" target="_blank">Java 队列</a> <span class="text-muted">tryxr</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E9%98%9F%E5%88%97/1.htm">队列</a> <div>队列一般用什么哪种结构实现队列的特性数据入队列时一定是从尾部插入吗数据出队列时一定是从头部删除吗队列的基本运算有什么队列支持随机访问吗队列的英文表示什么是队列队列从哪进、从哪出队列的进出顺序队列是用哪种结构实现的Queue和Deque有什么区别Queue接口的方法Queue中的add与offer的区别offer、poll、peek的模拟实现如何利用链表实现队列如何利用顺序表实现队列什么叫做双端队列</div> </li> <li><a href="/article/1950215540215705600.htm" title="JVM 内存分配与回收策略:从对象创建到内存释放的全流程" target="_blank">JVM 内存分配与回收策略:从对象创建到内存释放的全流程</a> <span class="text-muted"></span> <div>在JVM的运行机制中,内存分配与回收策略是连接对象生命周期与垃圾收集器的桥梁。它决定了对象在堆内存中的创建位置、存活过程中的区域迁移,以及最终被回收的时机。合理的内存分配策略能减少GC频率、降低停顿时间,是优化Java应用性能的核心环节。本文将系统解析JVM的内存分配规则、对象晋升机制,以及实战中的内存优化技巧。一、对象优先在Eden区分配:新生代的“临时缓冲区”大多数情况下,Java对象在新生代</div> </li> <li><a href="/article/1950214964396486656.htm" title="js操作样式" target="_blank">js操作样式</a> <span class="text-muted">郝加升</span> <div>DOM样式属性和方法:指定的元素,它的style有这么几个属性和方法:cssText:通过这个属性可以访问到元素的特性style设置的属性,并且可以直接赋值设置。removeProperty(属性名称):从样式中删除给定属性。setProperty(属性名称,值,权重):可以通过这个方法设置给定样式的同时设置其权重,可以传入”important”或者一个空字符串。获取计算后样式:window.ge</div> </li> <li><a href="/article/1950214657335685120.htm" title="代码随想录算法训练营第三十五天" target="_blank">代码随想录算法训练营第三十五天</a> <span class="text-muted"></span> <div>01背包问题二维题目链接01背包问题二维题解importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intM=sc.nextInt();intN=sc.nextInt();int[]space=newint[M];int[]value=new</div> </li> <li><a href="/article/1950209621381672960.htm" title="Android 应用权限管理详解" target="_blank">Android 应用权限管理详解</a> <span class="text-muted"></span> <div>文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G</div> </li> <li><a href="/article/1950208989954371584.htm" title="Selenium 特殊控件操作与 ActionChains 实践详解" target="_blank">Selenium 特殊控件操作与 ActionChains 实践详解</a> <span class="text-muted">小馋喵知识杂货铺</span> <a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>1.下拉框单选操作(a)使用SeleniumSelect类(标准HTML标签)Selenium提供了内置的Select类用于操作标准下拉框,这种方式简单且直观。fromselenium.webdriver.support.uiimportSelect#定位下拉框dropdown=Select(driver.find_element("id","dropdown_id"))#通过以下三种方式选择单个</div> </li> <li><a href="/article/1950207097413103616.htm" title="微信公众号回调java_处理微信公众号消息回调" target="_blank">微信公众号回调java_处理微信公众号消息回调</a> <span class="text-muted">weixin_39607620</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E5%9B%9E%E8%B0%83java/1.htm">微信公众号回调java</a> <div>1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.</div> </li> <li><a href="/article/1950205711409541120.htm" title="selenium特殊场景处理" target="_blank">selenium特殊场景处理</a> <span class="text-muted">Monica_ll</span> <a class="tag" taget="_blank" href="/search/Selenium/1.htm">Selenium</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>文章目录前言一、多窗口处理二、浏览器弹窗处理包含alert、confirm、prompt三、鼠标和键盘事件处理前言在使用selenium操作浏览器的过程中可能需要借助键盘和鼠标功能完成一些操作,或者操作弹窗处理,本文主要是整理自己工作过程中使用过的一些方法一、多窗口处理在实际测试过程中经常会有通过点击或者连接打开新的窗口,这种情况下就需要切换webDriver到对应浏览器对象才能操作新窗口的元素。</div> </li> <li><a href="/article/1950200667587014656.htm" title="学C++的五大惊人好处" target="_blank">学C++的五大惊人好处</a> <span class="text-muted"></span> <div>为什么要学c++学c++有什么用学习c++的好处有1.中考可以加分2.高考可能直接录取3.就业广且工资高4.在未来30--50年c++一定是一个很受欢迎的职业5.c++成功的例子deepsick等AI智能C++语言兼备编程效率和编译运行效率的语言C++语言是C语言功能增强版,在c语言的基础上添加了面向对象编程和泛型编程的支持既继承了C语言高效,简洁,快速和可移植的传统,又具备类似Java、Go等其</div> </li> <li><a href="/article/1950200541233606656.htm" title="Android 基础知识:Android 应用权限详解" target="_blank">Android 基础知识:Android 应用权限详解</a> <span class="text-muted">流水mpc</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>这篇文章为大家系统的梳理一下Android权限相关的知识,在日常开发中,我们都用过权限,但是对于权限的一些细节我们可能掌握的还不够全面,这篇文章会全面的为大家介绍权限相关的知识。当然,本篇文章依然是参考了Google的官方文档:应用权限。本文目录一、认识Android权限(一)Android系统为什么需要权限?Android系统设置权限的目的是保护Android用户的隐私。对于用户的敏感数据And</div> </li> <li><a href="/article/1950200414989250560.htm" title="面试必考题:Android Binder 机制详解" target="_blank">面试必考题:Android Binder 机制详解</a> <span class="text-muted">大模型大数据攻城狮</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/binder/1.htm">binder</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/dalvik/1.htm">dalvik</a><a class="tag" taget="_blank" href="/search/retrofit/1.htm">retrofit</a> <div>目录第一章:Binder的基本概念什么是Binder?多角度解读Binder第二章:Binder的工作机制Binder的整体流程服务注册:从零到有的第一步服务查询:找到目标的“地图”服务调用:请求与响应的旅程Binder驱动的幕后功劳为什么Binder这么快?第三章:Binder在系统架构中的角色Activity:界面背后的通信枢纽Binder的角色实例分析Service:后台任务的跨进程支柱Bi</div> </li> <li><a href="/article/1950199532725792768.htm" title="Android GreenDao介绍和Generator生成表对象代码" target="_blank">Android GreenDao介绍和Generator生成表对象代码</a> <span class="text-muted"></span> <div>目录(?)[-]介绍创建工程转载请注明:http://blog.csdn.net/sinat_30276961/article/details/50052109最近无意中发现了GreenDao,然后查看了一些资料后,发现这个数据库框架很适合用,于是乎,查看了官网的api,并自己写了一个小应用总结一下它的使用方法。介绍按照国际惯例,在开篇,总要先介绍一下什么是GreenDao吧。首先需要说明的是Gr</div> </li> <li><a href="/article/1950199278483861504.htm" title="Android 媒体播放开发完全指南" target="_blank">Android 媒体播放开发完全指南</a> <span class="text-muted">安卓开发者</span> <a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/Jetpack/1.htm">Jetpack</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E5%AA%92%E4%BD%93/1.htm">媒体</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>引言在当今移动应用生态中,媒体播放功能已成为许多应用的核心组成部分。无论是音乐流媒体应用、视频平台、播客客户端还是游戏应用,都需要强大的媒体播放能力。Android平台提供了丰富的API来支持各种媒体播放场景。本文将全面介绍Android媒体播放的开发技术,从基础到高级功能实现。一、Android媒体播放基础1.1支持的媒体格式Android原生支持多种媒体格式:音频:MP3、AAC、FLAC、W</div> </li> <li><a href="/article/1950199279641489408.htm" title="Android通知(Notification)全面解析:从基础到高级应用" target="_blank">Android通知(Notification)全面解析:从基础到高级应用</a> <span class="text-muted"></span> <div>一、Android通知概述通知(Notification)是Android系统中用于在应用之外向用户传递信息的重要机制。当应用需要告知用户某些事件或信息时,可以通过通知在状态栏显示图标,用户下拉通知栏即可查看详细信息。这种机制几乎被所有现代应用采用,用于推送新闻、消息、广告等内容3。与Toast相比,Notification的优势在于:可以长时间停留在通知栏,适合内容较多且需要持久展示的信息支持丰</div> </li> <li><a href="/article/1950199280132222976.htm" title="Android Slices:让应用功能在系统级交互中触手可及" target="_blank">Android Slices:让应用功能在系统级交互中触手可及</a> <span class="text-muted">安卓开发者</span> <a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/Jetpack/1.htm">Jetpack</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E4%BA%A4%E4%BA%92/1.htm">交互</a><a class="tag" taget="_blank" href="/search/gitee/1.htm">gitee</a> <div>引言在当今移动应用生态中,用户每天要面对数十个甚至上百个应用的选择,如何让自己的应用在关键时刻触达用户,成为开发者面临的重要挑战。Google在Android9Pie中引入的Slices技术,正是为了解决这一痛点而生。本文将全面介绍AndroidSlices的概念、实现方法、应用场景以及最佳实践,帮助开发者掌握这一提升用户参与度的强大工具。什么是AndroidSlices?AndroidSlice</div> </li> <li><a href="/article/1950198522972270592.htm" title="Java8 Stream流的sorted()的排序【正序、倒序、多字段排序】" target="_blank">Java8 Stream流的sorted()的排序【正序、倒序、多字段排序】</a> <span class="text-muted">Tony666688888</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>针对集合排序,java8可以用Stream流的sorted()进行排序。示例Bean以下我们会使用这个Bean来做示例。publicclassOrder{privateStringweight;privateDoubleprice;privateStringdateStr;//忽略getter、setter、构造方法、toString}字段排序首先是比较器Comparator,形式如下:Compa</div> </li> <li><a href="/article/1950194742100815872.htm" title="用代码生成艺术字:设计个性化海报的秘密" target="_blank">用代码生成艺术字:设计个性化海报的秘密</a> <span class="text-muted"></span> <div>本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准</div> </li> <li><a href="/article/10.htm" title="jsonp 常用util方法" target="_blank">jsonp 常用util方法</a> <span class="text-muted">hw1287789687</span> <a class="tag" taget="_blank" href="/search/jsonp/1.htm">jsonp</a><a class="tag" taget="_blank" href="/search/jsonp%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95/1.htm">jsonp常用方法</a><a class="tag" taget="_blank" href="/search/jsonp+callback/1.htm">jsonp callback</a> <div>jsonp 常用java方法 (1)以jsonp的形式返回:函数名(json字符串) /*** * 用于jsonp调用 * @param map : 用于构造json数据 * @param callback : 回调的javascript方法名 * @param filters : <code>SimpleBeanPropertyFilter theFilt</div> </li> <li><a href="/article/137.htm" title="多线程场景" target="_blank">多线程场景</a> <span class="text-muted">alafqq</span> <a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a> <div>0 能不能简单描述一下你在java web开发中需要用到多线程编程的场景?0 对多线程有些了解,但是不太清楚具体的应用场景,能简单说一下你遇到的多线程编程的场景吗? Java多线程 2012年11月23日 15:41 Young9007 Young9007 4 0 0 4 Comment添加评论关注(2) 3个答案 按时间排序 按投票排序 0 0 最典型的如: 1、</div> </li> <li><a href="/article/264.htm" title="Maven学习——修改Maven的本地仓库路径" target="_blank">Maven学习——修改Maven的本地仓库路径</a> <span class="text-muted">Kai_Ge</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>      安装Maven后我们会在用户目录下发现.m2 文件夹。默认情况下,该文件夹下放置了Maven本地仓库.m2/repository。所有的Maven构件(artifact)都被存储到该仓库中,以方便重用。但是windows用户的操作系统都安装在C盘,把Maven仓库放到C盘是很危险的,为此我们需要修改Maven的本地仓库路径。    </div> </li> <li><a href="/article/391.htm" title="placeholder的浏览器兼容" target="_blank">placeholder的浏览器兼容</a> <span class="text-muted">120153216</span> <a class="tag" taget="_blank" href="/search/placeholder/1.htm">placeholder</a> <div>【前言】 自从html5引入placeholder后,问题就来了, 不支持html5的浏览器也先有这样的效果, 各种兼容,之前考虑,今天测试人员逮住不放, 想了个解决办法,看样子还行,记录一下。   【原理】 不使用placeholder,而是模拟placeholder的效果, 大概就是用focus和focusout效果。   【代码】 <scrip</div> </li> <li><a href="/article/518.htm" title="debian_用iso文件创建本地apt源" target="_blank">debian_用iso文件创建本地apt源</a> <span class="text-muted">2002wmj</span> <a class="tag" taget="_blank" href="/search/Debian/1.htm">Debian</a> <div>1.将N个debian-506-amd64-DVD-N.iso存放于本地或其他媒介内,本例是放在本机/iso/目录下 2.创建N个挂载点目录 如下: debian:~#mkdir –r /media/dvd1 debian:~#mkdir –r /media/dvd2 debian:~#mkdir –r /media/dvd3 …. debian:~#mkdir –r /media</div> </li> <li><a href="/article/645.htm" title="SQLSERVER耗时最长的SQL" target="_blank">SQLSERVER耗时最长的SQL</a> <span class="text-muted">357029540</span> <a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a> <div>对于DBA来说,经常要知道存储过程的某些信息: 1.   执行了多少次 2.   执行的执行计划如何 3.   执行的平均读写如何 4.   执行平均需要多少时间 列名          &</div> </li> <li><a href="/article/772.htm" title="com/genuitec/eclipse/j2eedt/core/J2EEProjectUtil" target="_blank">com/genuitec/eclipse/j2eedt/core/J2EEProjectUtil</a> <span class="text-muted">7454103</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a> <div>今天eclipse突然报了com/genuitec/eclipse/j2eedt/core/J2EEProjectUtil 错误,并且工程文件打不开了,在网上找了一下资料,然后按照方法操作了一遍,好了,解决方法如下: 错误提示信息: An error has occurred.See error log for more details. Reason: com/genuitec/</div> </li> <li><a href="/article/899.htm" title="用正则删除文本中的html标签" target="_blank">用正则删除文本中的html标签</a> <span class="text-muted">adminjun</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/%E5%8E%BB%E6%8E%89html%E6%A0%87%E7%AD%BE/1.htm">去掉html标签</a> <div>使用文本编辑器录入文章存入数据中的文本是HTML标签格式,由于业务需要对HTML标签进行去除只保留纯净的文本内容,于是乎Java实现自动过滤。 如下: public static String Html2Text(String inputString) { String htmlStr = inputString; // 含html标签的字符串 String textSt</div> </li> <li><a href="/article/1026.htm" title="嵌入式系统设计中常用总线和接口" target="_blank">嵌入式系统设计中常用总线和接口</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/linux+%E5%9F%BA%E7%A1%80/1.htm">linux 基础</a> <div>               嵌入式系统设计中常用总线和接口         任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接,那么连线</div> </li> <li><a href="/article/1153.htm" title="Java函数调用方式——按值传递" target="_blank">Java函数调用方式——按值传递</a> <span class="text-muted">ayaoxinchao</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%8C%89%E5%80%BC%E4%BC%A0%E9%80%92/1.htm">按值传递</a><a class="tag" taget="_blank" href="/search/%E5%AF%B9%E8%B1%A1/1.htm">对象</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/1.htm">基础数据类型</a> <div>Java使用按值传递的函数调用方式,这往往使我感到迷惑。因为在基础数据类型和对象的传递上,我就会纠结于到底是按值传递,还是按引用传递。其实经过学习,Java在任何地方,都一直发挥着按值传递的本色。   首先,让我们看一看基础数据类型是如何按值传递的。   public static void main(String[] args) { int a = 2; </div> </li> <li><a href="/article/1280.htm" title="ios音量线性下降" target="_blank">ios音量线性下降</a> <span class="text-muted">bewithme</span> <a class="tag" taget="_blank" href="/search/ios%E9%9F%B3%E9%87%8F/1.htm">ios音量</a> <div>直接上代码吧   //second 几秒内下降为0 - (void)reduceVolume:(int)second { KGVoicePlayer *player = [KGVoicePlayer defaultPlayer]; if (!_flag) { _tempVolume = player.volume; </div> </li> <li><a href="/article/1407.htm" title="与其怨它不如爱它" target="_blank">与其怨它不如爱它</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E9%80%89%E6%8B%A9/1.htm">选择</a><a class="tag" taget="_blank" href="/search/%E7%90%86%E6%83%B3/1.htm">理想</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E4%B8%9A/1.htm">职业</a><a class="tag" taget="_blank" href="/search/%E8%A7%84%E5%88%92/1.htm">规划</a> <div>        抱怨工作是年轻人的常态,但爱工作才是积极的心态,与其怨它不如爱它。         一般来说,在公司干了一两年后,不少年轻人容易产生怨言,除了具体的埋怨公司“扭门”,埋怨上司无能以外,也有许多人是因为根本不爱自已的那份工作,工作完全成了谋生的手段,跟自已的性格、专业、爱好都相差甚远。   </div> </li> <li><a href="/article/1534.htm" title="一边时间不够用一边浪费时间" target="_blank">一边时间不够用一边浪费时间</a> <span class="text-muted">bingyingao</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4/1.htm">时间</a><a class="tag" taget="_blank" href="/search/%E6%B5%AA%E8%B4%B9/1.htm">浪费</a> <div>一方面感觉时间严重不够用,另一方面又在不停的浪费时间。 每一个周末,晚上熬夜看电影到凌晨一点,早上起不来一直睡到10点钟,10点钟起床,吃饭后玩手机到下午一点。 精神还是很差,下午像一直野鬼在城市里晃荡。 为何不尝试晚上10点钟就睡,早上7点就起,时间完全是一样的,把看电影的时间换到早上,精神好,气色好,一天好状态。 控制让自己周末早睡早起,你就成功了一半。 有多少个工作</div> </li> <li><a href="/article/1661.htm" title="【Scala八】Scala核心二:隐式转换" target="_blank">【Scala八】Scala核心二:隐式转换</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>Implicits work like this: if you call a method on a Scala object, and the Scala compiler does not see a definition for that method in the class definition for that object, the compiler will try to con</div> </li> <li><a href="/article/1788.htm" title="sudoku slover in Haskell (2)" target="_blank">sudoku slover in Haskell (2)</a> <span class="text-muted">bookjovi</span> <a class="tag" taget="_blank" href="/search/haskell/1.htm">haskell</a><a class="tag" taget="_blank" href="/search/sudoku/1.htm">sudoku</a> <div>继续精简haskell版的sudoku程序,稍微改了一下,这次用了8行,同时性能也提高了很多,对每个空格的所有解不是通过尝试算出来的,而是直接得出。   board = [0,3,4,1,7,0,5,0,0, 0,6,0,0,0,8,3,0,1, 7,0,0,3,0,0,0,0,6, 5,0,0,6,4,0,8,0,7, </div> </li> <li><a href="/article/1915.htm" title="Java-Collections Framework学习与总结-HashSet和LinkedHashSet" target="_blank">Java-Collections Framework学习与总结-HashSet和LinkedHashSet</a> <span class="text-muted">BrokenDreams</span> <a class="tag" taget="_blank" href="/search/linkedhashset/1.htm">linkedhashset</a> <div>        本篇总结一下两个常用的集合类HashSet和LinkedHashSet。         它们都实现了相同接口java.util.Set。Set表示一种元素无序且不可重复的集合;之前总结过的java.util.List表示一种元素可重复且有序</div> </li> <li><a href="/article/2042.htm" title="读《研磨设计模式》-代码笔记-备忘录模式-Memento" target="_blank">读《研磨设计模式》-代码笔记-备忘录模式-Memento</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ import java.util.ArrayList; import java.util.List; /* * 备忘录模式的功能是,在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,为以后的状态恢复作“备忘” </div> </li> <li><a href="/article/2169.htm" title="《RAW格式照片处理专业技法》笔记" target="_blank">《RAW格式照片处理专业技法》笔记</a> <span class="text-muted">cherishLC</span> <a class="tag" taget="_blank" href="/search/PS/1.htm">PS</a> <div>注意,这不是教程!仅记录楼主之前不太了解的 一、色彩(空间)管理 作者建议采用ProRGB(色域最广),但camera raw中设为ProRGB,而PS中则在ProRGB的基础上,将gamma值设为了1.8(更符合人眼) 注意:bridge、camera raw怎么设置显示、输出的颜色都是正确的(会读取文件内的颜色配置文件),但用PS输出jpg文件时,必须先用Edit->conv</div> </li> <li><a href="/article/2296.htm" title="使用 Git 下载 Spring 源码 编译 for Eclipse" target="_blank">使用 Git 下载 Spring 源码 编译 for Eclipse</a> <span class="text-muted">crabdave</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a> <div>使用 Git 下载 Spring 源码 编译 for Eclipse   1、安装gradle,下载 http://www.gradle.org/downloads 配置环境变量GRADLE_HOME,配置PATH  %GRADLE_HOME%/bin,cmd,gradle -v   2、spring4 用jdk8 下载 https://jdk8.java.</div> </li> <li><a href="/article/2423.htm" title="mysql连接拒绝问题" target="_blank">mysql连接拒绝问题</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E7%99%BB%E5%BD%95%E6%9D%83%E9%99%90/1.htm">登录权限</a> <div>mysql中在其它机器连接mysql服务器时报错问题汇总 一、[running]root@192.168.9.136:~$mysql -uroot -h 192.168.9.108 -p   //带-p参数,在下一步进行密码输入 Enter password:    //无字符串输入 ERROR 1045 (28000): Access </div> </li> <li><a href="/article/2550.htm" title="Google Chrome 为何打压 H.264" target="_blank">Google Chrome 为何打压 H.264</a> <span class="text-muted">dsjt</span> <a class="tag" taget="_blank" href="/search/apple/1.htm">apple</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a> <div>Google 今天在 Chromium 官方博客宣布由于 H.264 编解码器并非开放标准,Chrome 将在几个月后正式停止对 H.264 视频解码的支持,全面采用开放的 WebM 和 Theora 格式。 Google 在博客上表示,自从 WebM 视频编解码器推出以后,在性能、厂商支持以及独立性方面已经取得了很大的进步,为了与 Chromium 现有支持的編解码器保持一致,Chrome</div> </li> <li><a href="/article/2677.htm" title="yii 获取控制器名 和方法名" target="_blank">yii 获取控制器名 和方法名</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a><a class="tag" taget="_blank" href="/search/framework/1.htm">framework</a> <div>1. 获取控制器名 在控制器中获取控制器名:  $name = $this->getId(); 在视图中获取控制器名:    $name = Yii::app()->controller->id;    2. 获取动作名  在控制器beforeAction()回调函数中获取动作名:  $name = </div> </li> <li><a href="/article/2804.htm" title="Android知识总结(二)" target="_blank">Android知识总结(二)</a> <span class="text-muted">come_for_dream</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>明天要考试了,速速总结如下   1、Activity的启动模式        standard:每次调用Activity的时候都创建一个(可以有多个相同的实例,也允许多个相同Activity叠加。)        singleTop:可以有多个实例,但是不允许多个相同Activity叠加。即,如果Ac</div> </li> <li><a href="/article/2931.htm" title="高洛峰收徒第二期:寻找未来的“技术大牛” ——折腾一年,奖励20万元" target="_blank">高洛峰收徒第二期:寻找未来的“技术大牛” ——折腾一年,奖励20万元</a> <span class="text-muted">gcq511120594</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a> <div>高洛峰,兄弟连IT教育合伙人、猿代码创始人、PHP培训第一人、《细说PHP》作者、软件开发工程师、《IT峰播》主创人、PHP讲师的鼻祖! 首期现在的进程刚刚过半,徒弟们真的很棒,人品都没的说,团结互助,学习刻苦,工作认真积极,灵活上进。我几乎会把他们全部留下来,现在已有一多半安排了实际的工作,并取得了很好的成绩。等他们出徒之日,凭他们的能力一定能够拿到高薪,而且我还承诺过一个徒弟,当他拿到大学毕</div> </li> <li><a href="/article/3058.htm" title="linux expect" target="_blank">linux expect</a> <span class="text-muted">heipark</span> <a class="tag" taget="_blank" href="/search/expect/1.htm">expect</a> <div>1. 创建、编辑文件go.sh   #!/usr/bin/expect spawn sudo su admin expect "*password*" { send "13456\r\n" } interact    2. 设置权限   chmod u+x go.sh  3.</div> </li> <li><a href="/article/3185.htm" title="Spring4.1新特性——静态资源处理增强" target="_blank">Spring4.1新特性——静态资源处理增强</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring+4.1/1.htm">spring 4.1</a> <div>目录 Spring4.1新特性——综述 Spring4.1新特性——Spring核心部分及其他 Spring4.1新特性——Spring缓存框架增强 Spring4.1新特性——异步调用和事件机制的异常处理 Spring4.1新特性——数据库集成测试脚本初始化 Spring4.1新特性——Spring MVC增强 Spring4.1新特性——页面自动化测试框架Spring MVC T</div> </li> <li><a href="/article/3312.htm" title="idea ubuntuxia 乱码" target="_blank">idea ubuntuxia 乱码</a> <span class="text-muted">liyonghui160com</span> <div>  1.首先需要在windows字体目录下或者其它地方找到simsun.ttf 这个 字体文件。 2.在ubuntu 下可以执行下面操作安装该字体: sudo mkdir /usr/share/fonts/truetype/simsun sudo cp simsun.ttf /usr/share/fonts/truetype/simsun fc-cache -f -v </div> </li> <li><a href="/article/3439.htm" title="改良程序的11技巧" target="_blank">改良程序的11技巧</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E5%B7%A7/1.htm">技巧</a> <div>有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点,程序你只写一次,但以后会无数次的阅读。当你第二天回头来看你的代码 时,你就要开始阅读它了。当你把代码拿给其他人看时,他必须阅读你的代码。因此,在编写时多花一点时间,你会在阅读它时节省大量的时间。   让我们看一些基本的编程技巧:   尽量保持方法简短 永远永远不要把同一个变量用于多个不同的</div> </li> <li><a href="/article/3566.htm" title="300个涵盖IT各方面的免费资源(下)——工作与学习篇" target="_blank">300个涵盖IT各方面的免费资源(下)——工作与学习篇</a> <span class="text-muted">shoothao</span> <a class="tag" taget="_blank" href="/search/%E5%88%9B%E4%B8%9A/1.htm">创业</a><a class="tag" taget="_blank" href="/search/%E5%85%8D%E8%B4%B9%E8%B5%84%E6%BA%90/1.htm">免费资源</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%AF%BE%E7%A8%8B/1.htm">学习课程</a><a class="tag" taget="_blank" href="/search/%E8%BF%9C%E7%A8%8B%E5%B7%A5%E4%BD%9C/1.htm">远程工作</a> <div>工作与生产效率:   A. 背景声音 Noisli:背景噪音与颜色生成器。 Noizio:环境声均衡器。 Defonic:世界上任何的声响都可混合成美丽的旋律。 Designers.mx:设计者为设计者所准备的播放列表。 Coffitivity:这里的声音就像咖啡馆里放的一样。 B. 避免注意力分散 Self Co</div> </li> <li><a href="/article/3693.htm" title="深入浅出RPC" target="_blank">深入浅出RPC</a> <span class="text-muted">uule</span> <a class="tag" taget="_blank" href="/search/rpc/1.htm">rpc</a> <div>深入浅出RPC-浅出篇 深入浅出RPC-深入篇   RPC Remote Procedure Call Protocol 远程过程调用协议   它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>