XML (可扩展标记语言)

XML (可扩展标记语言)

一、 标记语言

    标记语言,是一种将文本(txt)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。

    当今广泛使用的标记语言是超文本标记语言(HyperText Markup Language,)HTML 和 可扩展标记语言(Extensible Markup Language)XML。标记语言广泛应用于网页和网络应用程序。

1、超文本标记语言 HTML

(1)写法格式:linklink
(2)关注数据的展示与用户体验
(3)标记是预定义、不可扩展的(如 表示超链接)

2、可扩展的标记语言 XML

(1)写法格式:同 html 样式
(2)仅关注数据本身
(3)标记可扩展,可自定义

xml 和 Html 语言是由同一种父语言 SGML(Standard Generalized Markup Language,标准通用标记语言)发展出来的两种语言。

    xml 由 html 发展而来,与 html 格式相似,但是比html 严格。

    XML 描述的是结构、内容和语义,它不描述页面元素的格式化。HTML 侧重于如何表现信息,内容描述与显示整合为一体。

    XML 中的每个元素名都是成对出现的,结束标签前加一个/



二、XML 作用

    XML 可以用于描述数据、存储数据、传输(交换)数据。XML 现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便,用户可以定义自己需要的标记。

1、存储、交换数据

    XML 只用元素和属性来描述数据,而不提供数据的显示方法,这使得 XML 具有能够运
行于不同系统平台之间和转换成不同格式目标文件。 用 XML 在应用程序和公司之间作数据交换,几个应用程序可以共享和解析同一个 XML 文件,不必使用传统的字符串解析或拆解过程。

2、配置

许多应用都将配置数据存储在各种文件里,如 SSH、Android。使用 XML 配置文件的应用程序能够方便地处理所需数据,不用像其它应用那样要经过重新编译才能修改和维护应用系统。xml 比 数据库占用的资源少,操作方便,用来存储简单的信息,现在主要用在程序的配置文件上(比如 web.xml)。现在有越来越多的设备也支持 XML 了。

三、XML 示例

用 XML 存储已注册用户的数据方式

1、方式 1
"1.0" encoding="UTF-8"?>


张三</name>
28</age>
</person>

李四</name>
30</age>
</person>
</people>
2、方式 2
"1.0" encoding="UTF-8"?>

"白晶晶" age="28"></person>
"至尊宝" age="300"></person>
</people>
用 xml 存储连续剧
"1.0" encoding="UTF-8"?>
<!-- 第一行是XML声明 -->
<!-- 这是XML处理指令的例子:处理指令以,以?>结束 -->
<!--,在本例中是xml> -->
<!-- 处理指令一定要顶格写,前面不能有任何空白 -->


"郑晓龙"</span>>芈月传<<span class="token operator">/</span>title>
<players>
<player>孙俪<<span class="token operator">/</span>player>
<player>刘涛<<span class="token operator">/</span>player>
<player>马苏<<span class="token operator">/</span>player>
<player>方中信<<span class="token operator">/</span>player>
<player>黄轩<<span class="token operator">/</span>player>
<player>高云翔<<span class="token operator">/</span>player>
<<span class="token operator">/</span>players>
<desc><<span class="token operator">!</span><span class="token namespace">[CDATA[战国时期,芈月是楚威王最宠爱的小公主,但<desc>在楚威王
死后生活一落千丈,母亲向氏被楚威后逐出宫,芈月和弟弟芈戎躲过了一次次灾难和危机。
芈月与楚公子黄歇青梅竹马,真心相爱,但被作为嫡公主芈姝的陪嫁媵侍远嫁秦国。芈姝当
上了秦国的王后,芈月不得已成为宠妃...]]</span>><<span class="token operator">/</span>desc>
<<span class="token operator">/</span>sitcom>
<sitcom>
<title director=<span class="token string">"郑晓龙"</span>>甄嬛传<<span class="token operator">/</span>title>
<players>
<player>孙俪<<span class="token operator">/</span>player>
<player>陈建斌<<span class="token operator">/</span>player>
<player>蔡少芬<<span class="token operator">/</span>player>
<player>蒋欣<<span class="token operator">/</span>player>
<player>李东学<<span class="token operator">/</span>player>
<<span class="token operator">/</span>players>
<<span class="token operator">/</span>sitcom>
<<span class="token operator">/</span>sitcoms>
</code></pre> 
  <p>    文档的后缀名是 xml,每个文档有且仅有一个根元素,所谓根元素就是包含了其他所有元素的元素。XML 目前只有一个版本,即 1.0.XML 是自描述数据,使用现有的国际标准。</p> 
  <p>    XML 中有格式良好(Well-formed)的 XML 和有效的(validate)XML。</p> 
  <br> 
  <br> 
  <h3><font color="blue">四、格式良好的 xml<br></font></h3> 
  <h5>1、语法规范:</h5> 
  <h6>1)、必须有 XML 文档声明:</h6> 
  <p><a href="http://img.e-com-net.com/image/info8/54a6084936ae4a9597ed389dcf60802b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/54a6084936ae4a9597ed389dcf60802b.jpg" alt="XML (可扩展标记语言)_第1张图片" width="650" height="105" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/4878b2a5cfa9492f96e913769b03f3c7.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4878b2a5cfa9492f96e913769b03f3c7.jpg" alt="XML (可扩展标记语言)_第2张图片" width="650" height="224" style="border:1px solid black;"></a></p> 
  <p><strong>说明:</strong><br>     XML standalone 定义了外部定义的 DTD 文件的存在性. standalone element 有效值是 yes 和 no. 如下是一个例子:</p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span> standalone=<span class="token string">"no"</span>?>
<<span class="token operator">!</span>DOCTYPE s1 PUBLIC <span class="token string">"http://www.ibm.com/example.dtd"</span> <span class="token string">"example.dtd"</span>>
<s1><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><<span class="token operator">/</span>s1>
</code></pre> 
  <p>    值 no 表示这个 XML 文档不是独立的而是依赖于外部所定义的一个 DTD. 值 yes 表示这个 XML 文档是自包含的(self-contained).</p> 
  <p>    注意文本文件保存时候默认的编码格式是ANSI,需用记事本把它手动改为UTF-8保存。</p> 
  <h6>2)、必须有且仅有一个根元素</h6> 
  <h6>3)、严格区分大小写</h6> 
  <h6>4)、属性值用引号(双引号或单引号) :</h6> 
  <p>    等号分开的名称-值对;在一个元素上,相同的属性只能出现一次</p> 
  <h6>5)、标记成对;</h6> 
  <h6>6)、空标记关闭;</h6> 
  <h6>7)、元素正确嵌套。</h6> 
  <br> 
  <h5>2、元素命名规则</h5> 
  <h6>1)、名称中可以包含字母、数字或者其他可见字符;</h6> 
  <h6>2)、名称不能以数字开头;</h6> 
  <h6>3)、不能以 XML/xml/Xml…开头;</h6> 
  <h6>4)、名称中不能含空格;</h6> 
  <h6>5)、名称中不能含冒号(注:冒号留给命名空间使用)</h6> 
  <br> 
  <h5>3、实体</h5> 
  <p>    实体叫 ENTITY,实体的作用是避免重复输入。作用相当于宏或者变量。</p> 
  <h6>1)内置的 5 种实体</h6> 
  <table> 
   <thead> 
    <tr> 
     <th>实体</th> 
     <th>符号</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td><code><</code></td> 
     <td><</td> 
    </tr> 
    <tr> 
     <td><code>></code></td> 
     <td>></td> 
    </tr> 
    <tr> 
     <td><code>&</code></td> 
     <td>&</td> 
    </tr> 
    <tr> 
     <td><code>"</code></td> 
     <td>"</td> 
    </tr> 
    <tr> 
     <td><code>'</code></td> 
     <td>’</td> 
    </tr> 
   </tbody> 
  </table> 
  <h6>2)自定义实体</h6> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>DOCTYPE 根元素<span class="token punctuation">[</span>
<<span class="token operator">!</span>-<span class="token operator">-</span>实体声明<span class="token operator">--</span>>
<<span class="token operator">!</span>ENTITY 实体名 <span class="token string">"实体内容"</span>>
<span class="token punctuation">]</span>>
使用已定义的实体:&实体名<span class="token punctuation">;</span>
<?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span>?>
<<span class="token operator">!</span>DOCTYPE sxt<span class="token punctuation">[</span>
<<span class="token operator">!</span>-<span class="token operator">-</span>实体声明<span class="token operator">--</span>>
<<span class="token operator">!</span>ENTITY xm <span class="token string">"明明"</span>>
<<span class="token operator">!</span>ENTITY gen <span class="token string">"保密"</span>>
<span class="token punctuation">]</span>>
<xxx>
<teacher>
 <name>明明<<span class="token operator">/</span>name>
 <gender>保密<<span class="token operator">/</span>gender>
 <<span class="token operator">/</span>teacher>
 <<span class="token operator">!</span>-<span class="token operator">-</span>引用实体的方法<span class="token operator">--</span>>
 <teacher>
 <name>&xm<span class="token punctuation">;</span><<span class="token operator">/</span>name>
 <gender>&gen<span class="token punctuation">;</span><<span class="token operator">/</span>gender>
 <<span class="token operator">/</span>teacher>
<<span class="token operator">/</span>xxx>
</code></pre> 
  <br> 
  <h5>4、文档类型声明</h5> 
  <p>    文档类型定义——DOCTYPE,文档类型声明,紧跟 XML 声明之后,包含所有实体声明</p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"utf-8"</span>?>
<<span class="token operator">!</span>DOCTYPE 根元素标记名<span class="token punctuation">[</span><<span class="token operator">!</span>-<span class="token operator">-</span>实体声明<span class="token operator">--</span>><span class="token punctuation">]</span>>
</code></pre> 
  <br> 
  <br> 
  <h3><font color="blue">五、组成</font></h3> 
  <h5>1、构成</h5> 
  <p>    所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:<br>     元素<br>     属性<br>     实体<br>     PCDATA<br>     CDATA<br>     CDATA 节(character data)</p> 
  <h5>2、CDATA</h5> 
  <p>    用于把整段文本解释为纯字符数据而不是标记的情况。如包含大量的<、>、&、或者"字符。CDATA 节中的所有字符都会被当做元素字符数据的常量部分,而不是 XML 标记,可以输入除]]>外任意字符,不能嵌套。</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span><span class="token namespace">[CDATA[ ...... ]]</span>>
</code></pre> 
  <h5>3、PCDATA</h5> 
  <p>    PCDATA 的意思是被解析的字符数据(parsed character data)。<br> 可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 的内置实体来分别替换它们。<br> <br><br> <br></p> 
  <h3><font color="blue">六、XML 解析(重点)</font></h3> 
  <p>    基本的解析方式有两种:一种叫 SAX,另一种叫 DOM。SAX(Simple API for XML)是基于事件流的解析,DOM(Document Object Model)是基于 XML 文档树结构的解析。SAX:效率高,数据量小,仅一次获取 ,DOM:整颗树加载到内存中,耗内存,可多次获取。</p> 
  <h5>1、DOM 解析</h5> 
  <p>    与 js 中的类似,使用 JAXP(Java API for XML Parsing),即:用于 XML 解析的 Java API.</p> 
  <p>    DOM(Document Object Model, 文档对象模型),在应用程序中,基于 DOM 的 XML分析器将一个 XML 文档转换成一个对象模型的集合(通常称为 DOM 树),应用程序正是通过对这个对象模型的操作,来实现对 XML 文档数据的操作。</p> 
  <p>    XML 本身是以树状的形式出现的,所以 DOM 操作的时候,也将按章树的形式进行转换。在整个 DOM 树种,最大的地方指的是 Document,表示一个文档,在这个文档中存在一个根节点。</p> 
  <p>    注意:在使用 DOM 操作的时候,每一个文字的区域也是一个节点,称为文本节点。<br> 核心操作接口</p> 
  <h6>在 DOM 解析中有以下四个核心的操作接口</h6> 
  <h6>Document :</h6> 
  <p>    此接口代表了整个 XML 文档,表示的是整棵 DOM 树的根,提供了对文档中的数据进行访问和操作的入口,通过 Document 节点可以访问 XML 文件中所有的元素内容。</p> 
  <h6>Node :</h6> 
  <p>    此接口在整个 DOM 树种具有举足轻重的低位,DOM 操作的核心接口中有很大一部分接口是从 Node 接口继承过来的。例如:Document、Element 等接口,在 DOM树种,每一个 Node 接口代表了 DOM 树种的一个节点。</p> 
  <h6>NodeList :</h6> 
  <p>    此接口表示的是一个节点的集合,一般用于表示有顺序关系的一组节点,例如:一个节点的子节点,当文档改变的时候会直接影响到 NodeList 集合。</p> 
  <h6>NamedNodeMap :</h6> 
  <p>    此接口表示的是一组节点和其唯一名字对应的一一对应关系,本接口主要用于属性节点的表示上。</p> 
  <h6>DOM 解析过程</h6> 
  <p>如果一个程序需要进行 DOM 解析读取操作的话,也需要按照如下的步骤进行:</p> 
  <ul> 
   <li>① 建 立 DocumentBuilderFactory : DocumentBuilderFactory factory =<br> DocumentBuilderFactory.newInstance();</li> 
   <li>②建立 DocumentBuilder: DocumentBuilder builder = factory.newDocumentBuilder();</li> 
   <li>③建立 Document : Document doc = builder.parse(“要解析的文件路径”);</li> 
   <li>④建立 NodeList : NodeList nl = doc.getElementsByTagName(“读取节点”);</li> 
   <li>⑤进行 XML 信息读取<br> DOM 操作除了可以进行解析外,也可以进行文档的生成<br> 如果想要生成 XML 文件,则在创建文档的时候,就应该使用 newDocument()方法<br> 如果要将 DOM 的文档输出,本身是比较麻烦的 。一次编写多次 copy</li> 
  </ul> 
  <pre><code class="prism language-java"><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">createXml</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception<span class="token punctuation">{</span>
<span class="token comment">//获取解析器工厂</span>
DocumentBuilderFactory factory<span class="token operator">=</span>DocumentBuilderFactory<span class="token punctuation">.</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//获取解析器</span>
DocumentBuilder builder<span class="token operator">=</span>factory<span class="token punctuation">.</span><span class="token function">newDocumentBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//创建文档</span>
Document doc<span class="token operator">=</span>builder<span class="token punctuation">.</span><span class="token function">newDocument</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//创建元素、设置关系</span>
Element root<span class="token operator">=</span>doc<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"people"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element person<span class="token operator">=</span>doc<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"person"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element name<span class="token operator">=</span>doc<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element age<span class="token operator">=</span>doc<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
name<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>doc<span class="token punctuation">.</span><span class="token function">createTextNode</span><span class="token punctuation">(</span><span class="token string">"shsxt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
age<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>doc<span class="token punctuation">.</span><span class="token function">createTextNode</span><span class="token punctuation">(</span><span class="token string">"10"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
doc<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>root<span class="token punctuation">)</span><span class="token punctuation">;</span>
root<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>person<span class="token punctuation">)</span><span class="token punctuation">;</span>
person<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span>
person<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>age<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//写出去</span>
<span class="token comment">// 获得变压器工厂</span>
TransformerFactory tsf<span class="token operator">=</span>TransformerFactory<span class="token punctuation">.</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Transformer ts<span class="token operator">=</span>tsf<span class="token punctuation">.</span><span class="token function">newTransformer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//设置编码</span>
ts<span class="token punctuation">.</span><span class="token function">setOutputProperty</span><span class="token punctuation">(</span>OutputKeys<span class="token punctuation">.</span>ENCODING<span class="token punctuation">,</span> <span class="token string">"UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//创建带有DOM节点的新输入源,充当转换Source树的持有者</span>
DOMSource source<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">DOMSource</span><span class="token punctuation">(</span>doc<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//充当转换结果的持有者</span>
File file<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"src/output.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
StreamResult result<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">StreamResult</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
ts<span class="token punctuation">.</span><span class="token function">transform</span><span class="token punctuation">(</span>source<span class="token punctuation">,</span> result<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> 
  <br> 
  <h5>2、SAX 解析</h5> 
  <p>    SAX(Simple API for XML)解析是按照 xml 文件的顺序一步一步的来解析。<br>     SAX 没有官方的标准机构,它不属于任何标准阻止或团体,也不属于任何公司或个人,而是提供任何人使用的一种计算机技术。<br>     SAX(Simple API for XML,操作 XML 的简单接口),与 DOM 操作不同的是,SAX 采用的是一种顺序的模式进行访问,是一种快速读取 XML 数据的方式。当使用 SAX 解析器进行操作的时候会触发一系列的事情,当扫描到文档(document)开始与结束、元素(element)开始与结束时都会调用相关的处理方法,并由这些操作方法作出相应的操作,直至整个文档扫描结束。<br>     如果要想实现这种 SAX 解析,则肯定首先建立一个 SAX 的解析器</p> 
  <pre><code class="prism language-java"><span class="token comment">// 1、创建解析器工厂</span>
SAXParserFactory factory <span class="token operator">=</span> SAXParserFactory<span class="token punctuation">.</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 2、获得解析器</span>
SAXParser parser <span class="token operator">=</span> factory<span class="token punctuation">.</span><span class="token function">newSAXParser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// SAX解析器 ,继承 DefaultHandler</span>
String path <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"resource/demo01.xml"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAbsolutePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 解析</span>
parser<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span>path<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">MySaxHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> 
  <br> 
  <h5>3、DOM4j 解析</h5> 
  <p>    dom4j 是一个简单的开源库,用于处理 XML、 XPath 和 XSLT,它基于 Java 平台,使用 Java 的集合框架,全面集成了 DOM,SAX 和 JAXP。下载路径:<br> http://www.dom4j.org/dom4j-1.6.1/</p> 
  <p>http://sourceforge.net/projects/dom4j</p> 
  <p>可以使用 DOM4J 进行 XML 文件的读、写操作<br>     DOM4J 与 JDOM 一样都属于一个免费的 XML 开源组建,但是由于现在的开发框架中使用该技术较多,比如 Hibernate、Spring 等都使用 DOM4J 这个功能,所以作为介绍,大家可以对该组件有一个了解。并没有谁好谁坏,一般框架使用 DOM4J 较多,而我们平时如果要用则 JDOM 较常见。可以发现 DOM4J 发挥了很多新特性,比如输出格式就可以很好解析</p> 
  <pre><code class="prism language-powershell">File file = new File<span class="token punctuation">(</span><span class="token string">"resource/outputdom4j.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
SAXReader reader = new SAXReader<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 读取文件作为文档
Document doc = reader<span class="token punctuation">.</span>read<span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 获取文档的根元素
Element root = doc<span class="token punctuation">.</span>getRootElement<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 根据跟元素找到全部的子节点
Iterator<Element> iter = root<span class="token punctuation">.</span>elementIterator<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">while</span><span class="token punctuation">(</span>iter<span class="token punctuation">.</span>hasNext<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
Element name = iter<span class="token punctuation">.</span>next<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span>println<span class="token punctuation">(</span><span class="token string">"value = "</span> <span class="token operator">+</span> name<span class="token punctuation">.</span>getText<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h6>创建代码</h6> 
  <pre><code class="prism language-powershell">/<span class="token operator">/</span> 使用DocumentHelper来创建 Document对象
Document document = DocumentHelper<span class="token punctuation">.</span>createDocument<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 创建元素并设置关系
Element person = document<span class="token punctuation">.</span>addElement<span class="token punctuation">(</span><span class="token string">"person"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element name = person<span class="token punctuation">.</span>addElement<span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element age = person<span class="token punctuation">.</span>addElement<span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 设置文本
name<span class="token punctuation">.</span>setText<span class="token punctuation">(</span><span class="token string">"shsxt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
age<span class="token punctuation">.</span>setText<span class="token punctuation">(</span><span class="token string">"10"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 创建格式化输出器
OutputFormat of = OutputFormat<span class="token punctuation">.</span>createPrettyPrint<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
of<span class="token punctuation">.</span>setEncoding<span class="token punctuation">(</span><span class="token string">"utf-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 输出到文件
File file = new File<span class="token punctuation">(</span><span class="token string">"resource/outputdom4j.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
XMLWriter writer = new XMLWriter<span class="token punctuation">(</span>new FileOutputStream<span class="token punctuation">(</span>new
File<span class="token punctuation">(</span>file<span class="token punctuation">.</span>getAbsolutePath<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>of<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 写出
writer<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">;</span>
writer<span class="token punctuation">.</span>flush<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
writer<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> 
  <h6>Dom4J解析XML文档 代码</h6> 
  <pre><code class="prism language-java"><span class="token comment">// 	1、得到要解析的文件对象</span>
<span class="token comment">// 	2、得到解析器</span>
<span class="token comment">//	3、通过解析器将文件对象转换成Document对象</span>
<span class="token comment">// 	4、得到当前文档对象的根节点</span>
<span class="token comment">// 	5、得到 根节点的所有子节点,返回迭代器</span>
<span class="token comment">// 	6、遍历,得到每一个子节点的名称和值</span>
 
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Dom4JReader</span> <span class="token punctuation">{</span>
	
	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception <span class="token punctuation">{</span>
		
		<span class="token comment">// 1、得到要解析的文件对象</span>
		File file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"src/test.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 2、得到解析器</span>
		SAXReader reader <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SAXReader</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 3、通过解析器将文件对象转换成Document对象</span>
		Document document <span class="token operator">=</span> reader<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 4、得到当前文档对象的根节点</span>
		Element root <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getRootElement</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 5、得到 根节点的所有子节点,返回迭代器</span>
		Iterator<span class="token generics function"><span class="token punctuation"><</span>Element<span class="token punctuation">></span></span> iterator <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token function">elementIterator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 6、遍历,得到每一个子节点的名称和值</span>
		<span class="token keyword">while</span><span class="token punctuation">(</span>iterator<span class="token punctuation">.</span><span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
			Element el <span class="token operator">=</span> iterator<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
			System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>el<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
			System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>el<span class="token punctuation">.</span><span class="token function">getText</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span>
		
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h6>Dom4JWriter 代码</h6> 
  <pre><code class="prism language-java"><span class="token comment">// 使用DocumentHelper来创建 Document对象</span>
<span class="token comment">// 创建元素并设置关系</span>
<span class="token comment">// 设置文本</span>
<span class="token comment">// 创建格式化输出器</span>
<span class="token comment">// 输出到文件</span>
<span class="token comment">// 写出</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Dom4JWriter</span> <span class="token punctuation">{</span>

	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception <span class="token punctuation">{</span>
		
		<span class="token comment">// 使用DocumentHelper来创建 Document对象</span>
		Document document <span class="token operator">=</span> DocumentHelper<span class="token punctuation">.</span><span class="token function">createDocument</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 创建元素并设置关系</span>
		Element person <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">addElement</span><span class="token punctuation">(</span><span class="token string">"person"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		Element name <span class="token operator">=</span> person<span class="token punctuation">.</span><span class="token function">addElement</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		Element age <span class="token operator">=</span> person<span class="token punctuation">.</span><span class="token function">addElement</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 设置文本</span>
		name<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">"shsxt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		age<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">"10"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 创建格式化输出器</span>
		OutputFormat of <span class="token operator">=</span> OutputFormat<span class="token punctuation">.</span><span class="token function">createPrettyPrint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		of<span class="token punctuation">.</span><span class="token function">setEncoding</span><span class="token punctuation">(</span><span class="token string">"utf-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 输出到文件</span>
		File file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"src/outputdom4j.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		XMLWriter writer <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XMLWriter</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span>file<span class="token punctuation">.</span><span class="token function">getAbsolutePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>of<span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 写出</span>
		writer<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">;</span>
		writer<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		writer<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <br> 
  <h5>4、JDOM 解析</h5> 
  <p><strong>下载路径:</strong> http://www.jdom.org/downloads/index.html</p> 
  <p>    JDOM 是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序。 JDOM 是一个开源项目,它基于树形结构,利用纯 Java 的技术对 XML 文档实现解析、生成、序列化及多种操作。</p> 
  <p><strong>JDOM 解析</strong><br>     掌握 JDOM 开发工具的使用及产生原理可以使用 JDOM 进行读取或写入的操作在 W3C 本身提供的 XML 操作标准,DOM 和 SAX,但是从开发角度上看,DOM 和 SAX本身是各有特点的,DOM 可以修改,但不适合读取大文件,而 SAX 可以读取大文件,但是本身不能修改所谓的 JDOM = DOM 的可修改 + SAX 的读取大文件<br>     DOM 本身是一个免费的开源组建,直接从 www.jdom.org 上下载,下载后解压,将 jdom.jar 包拷贝到 Tomcat 目录(项目)的 lib 中</p> 
  <h6>JDOM 主要操作的类:</h6> 
  <p><a href="http://img.e-com-net.com/image/info8/4f81e6ffb7af46e69fa7de1de22a2098.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4f81e6ffb7af46e69fa7de1de22a2098.jpg" alt="XML (可扩展标记语言)_第3张图片" width="650" height="330" style="border:1px solid black;"></a><br>     我们发现 JDOM 的输出操作要比传统的 DOM 方便得多,而且也更加直观,包括在输出的时候都很容易了。此时观察到的是 JDOM 对于 DOM 解析的支持,但是也说,JDOM 本身也支持了 SAX 的特点;所以,可以使用 SAX 进行解析操作。</p> 
  <h6>解析代码:</h6> 
  <pre><code class="prism language-java"><span class="token comment">// 获取SAX解析器</span>
SAXBuilder builder <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SAXBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
File file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"resource/demo01.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取文档</span>
Document doc <span class="token operator">=</span> builder<span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span>file<span class="token punctuation">.</span><span class="token function">getAbsolutePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取根节点</span>
Element root <span class="token operator">=</span> doc<span class="token punctuation">.</span><span class="token function">getRootElement</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>root<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取根节点下所有的子节点, 也可以根据标签名称获取指定的直接点</span>
List<span class="token generics function"><span class="token punctuation"><</span>Element<span class="token punctuation">></span></span> list <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token function">getChildren</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>list<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> x <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> x<span class="token operator"><</span>list<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> x<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
Element e <span class="token operator">=</span> list<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取元素的名称和里面的文本</span>
String name <span class="token operator">=</span> e<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>name <span class="token operator">+</span> <span class="token string">"="</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getText</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"=================="</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
</code></pre> 
  <h6>创建代码</h6> 
  <pre><code class="prism language-java"><span class="token comment">// 创建节点</span>
Element person <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Element</span><span class="token punctuation">(</span><span class="token string">"person"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element name <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Element</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element age <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Element</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 创建属性</span>
Attribute id <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Attribute</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">,</span><span class="token string">"1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置文本</span>
name<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">"shsxt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
age<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">"10"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置关系</span>
Document doc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Document</span><span class="token punctuation">(</span>person<span class="token punctuation">)</span><span class="token punctuation">;</span>
person<span class="token punctuation">.</span><span class="token function">addContent</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span>
name<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span>
person<span class="token punctuation">.</span><span class="token function">addContent</span><span class="token punctuation">(</span>age<span class="token punctuation">)</span><span class="token punctuation">;</span>
XMLOutputter out <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XMLOutputter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
File file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"resource/outputjdom.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
out<span class="token punctuation">.</span><span class="token function">output</span><span class="token punctuation">(</span>doc<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">.</span><span class="token function">getAbsoluteFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> 
  <br> 
  <br> 
  <h3><font color="blue">七、XPATH</font></h3> 
  <h5>1、XPATH</h5> 
  <p>    XPath 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。XPath非常类似对数据库操作的 SQL 语言,或者说 JQuery,它可以方便开发者抓起文档中需要的东西。(dom4j 也支持 xpath)</p> 
  <h5>2.节点类型</h5> 
  <p>    XPath 中有七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点 (或称为根节点)。<br>     文档中存在元素节点,属性节点,根节点</p> 
  <h5>3.常用路径表达式</h5> 
  <table> 
   <thead> 
    <tr> 
     <th>表达式</th> 
     <th>描述</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>节点名称(nodename)</td> 
     <td>选取此节点的所有子节点</td> 
    </tr> 
    <tr> 
     <td>/</td> 
     <td>从根节点选取</td> 
    </tr> 
    <tr> 
     <td>//</td> 
     <td>从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置</td> 
    </tr> 
    <tr> 
     <td>.</td> 
     <td>选取当前节点</td> 
    </tr> 
    <tr> 
     <td>…</td> 
     <td>选取当前节点的父节点</td> 
    </tr> 
    <tr> 
     <td>@</td> 
     <td>选取属性</td> 
    </tr> 
   </tbody> 
  </table> 
  <p><strong>示例如下:</strong><br> //@lang ---- 选取所有名为 lang 的属性</p> 
  <h5>4.限定语</h5> 
  <p>用来查找某个特定的节点或者包含某个指定的值的节点。以方括号括起</p> 
  <pre><code class="prism language-bash">//book<span class="token punctuation">[</span>price<span class="token operator">></span>35.00<span class="token punctuation">]</span> 选择所有 book 元素,且其中的 price 元素的值须大于 35.00
/bookstore/book<span class="token punctuation">[</span>1<span class="token punctuation">]</span> 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book<span class="token punctuation">[</span>last<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span> 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book<span class="token punctuation">[</span>last<span class="token punctuation">(</span><span class="token punctuation">)</span>-1<span class="token punctuation">]</span> 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book<span class="token punctuation">[</span>position<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator"><</span>3<span class="token punctuation">]</span> 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title<span class="token punctuation">[</span>@lang<span class="token punctuation">]</span> 选取所有拥有名为 lang 的属性的 title 元素。
//title<span class="token punctuation">[</span>@lang<span class="token operator">=</span><span class="token string">'eng'</span><span class="token punctuation">]</span> 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book<span class="token punctuation">[</span>price<span class="token operator">></span>35.00<span class="token punctuation">]</span> 选取所有 bookstore 元素的 book 元素,且其中的 price
元素的值须大于 35.00。
/bookstore/book<span class="token punctuation">[</span>price<span class="token operator">></span>35.00<span class="token punctuation">]</span>/title 选取所有 bookstore 元素中的 book 元素的 title 元
素,且其中的 price 元素的值须大于 35.00。
</code></pre> 
  <h5>5 .通配符</h5> 
  <table> 
   <thead> 
    <tr> 
     <th>通配符</th> 
     <th>描述</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>*</td> 
     <td>匹配任何元素节点</td> 
    </tr> 
    <tr> 
     <td>@*</td> 
     <td>匹配任何属性节点</td> 
    </tr> 
    <tr> 
     <td>node()</td> 
     <td>匹配任何类型的节点</td> 
    </tr> 
    <tr> 
     <td><code>|</code></td> 
     <td>选取若干路径</td> 
    </tr> 
   </tbody> 
  </table> 
  <h6>使用示例</h6> 
  <table> 
   <thead> 
    <tr> 
     <th>路径表达式</th> 
     <th>结果</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>/bookstore/*</td> 
     <td>选取 bookstore 元素的所有子节点</td> 
    </tr> 
    <tr> 
     <td>//*</td> 
     <td>选取文档中的所有元素</td> 
    </tr> 
    <tr> 
     <td>//title[@*]</td> 
     <td>选取所有带有属性的 title 元素。</td> 
    </tr> 
    <tr> 
     <td>//book/title</td> 
     <td>//book/price</td> 
    </tr> 
    <tr> 
     <td>//title //price</td> 
     <td>选取所有文档中的 title 和 price 元素。</td> 
    </tr> 
    <tr> 
     <td>/bookstore/book/title //price</td> 
     <td>选取所有属于 bookstore 元素的 book 元素的 title 元素,以及文档中所有的 price 元素</td> 
    </tr> 
   </tbody> 
  </table> 
  <br> 
  <br> 
  <h3><font color="blue">八、DTD</font></h3> 
  <p>    使用 DTD 可以对文档的内容进行约束,XML 中的 DTD 数据必须用<!DOCTYPE>标记说明,语法格式如下:</p> 
  <p><strong>XML 的元素内容定义格式如下:</strong></p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT 元素内容描述字符串>
</code></pre> 
  <p><strong>DTD 还可以描述子元素的结构,其使用语法:</strong></p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT 子元素结构名称 子元素结构表达式>
</code></pre> 
  <p><strong>其中子元素结构有以下几种常用的定义方式:</strong><br> 1.按顺序包括 B、C、D、的所有内容:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B<span class="token punctuation">,</span>C<span class="token punctuation">,</span>D<span class="token punctuation">)</span>>
</code></pre> 
  <p>2.在 A 中要包含 B、C、D、的任意一个的内容:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B<span class="token punctuation">|</span>C<span class="token punctuation">|</span>D<span class="token punctuation">)</span>>
</code></pre> 
  <p>3.在 A 中包含 0-1 个 B:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B?<span class="token punctuation">)</span>>
</code></pre> 
  <p>4.在 A 中要包含 1 次以上各 B:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B<span class="token operator">+</span><span class="token punctuation">)</span>>
</code></pre> 
  <p>5.在 A 中要包含 O 次以上各 B:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B<span class="token operator">*</span><span class="token punctuation">)</span>>
</code></pre> 
  <p>6.空元素</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A EMPTY>
</code></pre> 
  <p><strong>代码示例:</strong></p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span>?>
<<span class="token operator">!</span>DOCTYPE persons<span class="token punctuation">[</span>
<<span class="token operator">!</span>ELEMENT persons <span class="token punctuation">(</span>person<span class="token operator">+</span><span class="token punctuation">)</span>>
<<span class="token operator">!</span>ELEMENT person <span class="token punctuation">(</span> name <span class="token punctuation">,</span> password? <span class="token punctuation">,</span> age<span class="token operator">+</span><span class="token punctuation">)</span> >
 <<span class="token operator">!</span>ATTLIST person sex <span class="token punctuation">(</span>男<span class="token punctuation">|</span>女<span class="token punctuation">)</span> <span class="token comment">#REQUIRED> </span>
 <<span class="token operator">!</span>ATTLIST person id ID <span class="token comment">#REQUIRED> </span>
 <<span class="token operator">!</span>ELEMENT name <span class="token punctuation">(</span><span class="token comment">#PCDATA)> </span>
 <<span class="token operator">!</span>ELEMENT password <span class="token punctuation">(</span><span class="token comment">#PCDATA)> </span>
 <<span class="token operator">!</span>ELEMENT age <span class="token punctuation">(</span><span class="token comment">#PCDATA)> </span>
<span class="token punctuation">]</span>> 
<persons>
 <person sex=<span class="token string">"男"</span> id=<span class="token string">"p1"</span>> 
 <name><<span class="token operator">/</span>name> 
 <password><<span class="token operator">/</span>password> 
 <age><<span class="token operator">/</span>age> 
 <<span class="token operator">/</span>person>
 <person sex=<span class="token string">"女"</span> id=<span class="token string">"p2"</span>> 
 <name><<span class="token operator">/</span>name> 
 <password><<span class="token operator">/</span>password> 
 <age><<span class="token operator">/</span>age> 
<<span class="token operator">/</span>person> 
<<span class="token operator">/</span>persons> 
</code></pre> 
  <br> 
  <br> 
  <h3><font color="blue">九、schema 简单编写</font></h3> 
  <p>    XML Schema 本身也是一种 XML 构造,它用来描述[哪个元素,在什么时候出现],[该元素具有什么样的属性]等等,也就是说,XML Schema 是对 XML 的树形构造加以描述说明的一种语言。原本,使用 DTD 对 XML 的树形构造加以描述说明,但 DTD 存在严重的局限性,DTD不能定义数据的类型,语法也与 XML 语言完全不一样,在使用的便利性,数据结构表达的严谨性上存在问题。使用 schema 对 xml 格式严格检查。</p> 
  <p><strong>简单的 XML Schema 例</strong><br> <strong>hello.xml</strong></p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span>?>
<hello xmlns:xsi=<span class="token string">"http://www.w3.org/2001/XMLSchema-instance"</span> 
xsi:noNamespaceSchemaLocation=<span class="token string">"file:///C:/Users/Administrator/Desktop/test.xsd"</span>>xmlschema简单入门 <<span class="token operator">/</span>hello>
</code></pre> 
  <p><strong>写一个简单的 XML Schema</strong></p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span>?>
<xs:schema xmlns:xs=<span class="token string">"http://www.w3.org/2001/XMLSchema"</span>>
<xs:element name=<span class="token string">"hello"</span> <span class="token function">type</span>=<span class="token string">"xs:string"</span><span class="token operator">/</span>> 
<<span class="token operator">/</span>xs:schema>
</code></pre> 
  <p><strong>解说:</strong></p> 
  <pre><code class="prism language-bash">第一行:
<span class="token operator"><</span>?xml version<span class="token operator">=</span><span class="token string">"1.0"</span> encoding<span class="token operator">=</span><span class="token string">"utf-8"</span>?<span class="token operator">></span>
XML 申明。XML Schema 本身也是 XML 文档,所以它遵循 XML 记述语法。使用 encoding属性指定文档的编码格式。
</code></pre> 
  <pre><code class="prism language-bash">根节点:
<span class="token operator"><</span>xs:schema xmlns:xs<span class="token operator">=</span><span class="token string">"http://www.w3.org/2001/XMLSchema"</span><span class="token operator">></span>
其中 xs 是命名空间,schema 是根节点名。
注意 xs:schema 与 xmlns:xs 中的 xs 要完全一样(名称可以任意,只要一样就可以),它标明以 xs:开头的节点元素是 http://www.w3.org/2001/XMLSchema 定义的元素。
</code></pre> 
  <pre><code class="prism language-bash">element 元素:
<span class="token operator"><</span>xs:element name<span class="token operator">=</span><span class="token string">"hello"</span> type<span class="token operator">=</span><span class="token string">"xs:string"</span><span class="token operator">></span>
上面已经说明,xs:element 表示 element 是 http://www.w3.org/2001/XMLSchema 中定义的元素。它的 name 属性用来定义它所描述的 XML 文档中的节点名。type 是表示该节点的值的类型。这里的 xs:string(string 类型)表示 hello 节点不能包含子节点,不能包含属性,它的内容值应该是 string 类型。除了 string 之外,XML Schema 还有很多其他类型。
</code></pre> 
  <pre><code class="prism language-bash">最后使用
<span class="token operator"><</span>/xs:schema<span class="token operator">></span>
完成整个 XML Schema 描述。
</code></pre> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1754382299232747520"></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">你可能感兴趣的:(web,前端_基础)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1939442738864910336.htm"
                           title="【Rust + Actix Web】现代后端开发:从零构建高并发 Web 应用" target="_blank">【Rust + Actix Web】现代后端开发:从零构建高并发 Web 应用</a>
                        <span class="text-muted">LCG元</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录项目概述环境准备项目创建与依赖配置系统架构设计核心代码实现1.数据库模型(`src/models.rs`)2.应用状态管理(`src/state.rs`)3.核心业务逻辑(`src/handlers.rs`)4.主应用入口(`src/main.rs`)高并发优化策略1.异步处理模型2.连接池配置优化3.缓存策略设计性能测试结果部署方案Docker部署配置(`Dockerfile`)Kubern</div>
                    </li>
                    <li><a href="/article/1939441478480752640.htm"
                           title="【HarmonyOS NEXT】使用半模态实现动态高度底部弹窗" target="_blank">【HarmonyOS NEXT】使用半模态实现动态高度底部弹窗</a>
                        <span class="text-muted">奔跑的露西</span>
<a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99/1.htm">鸿蒙</a><a class="tag" taget="_blank" href="/search/HarmonyOS/1.htm">HarmonyOS</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>一、背景在开发过程中,底部弹窗是一种常见的交互方式,下面总结如何实现高度根据内容动态调整的底部弹窗,并提供两种实现方案常见场景:当弹窗内容由动态数据驱动时(比如商品详情、任务列表、评论区等),内容高度可能随数据量变化数据少时弹窗矮一点数据多时弹窗高一点(但不超过屏幕80%)支持拖拽收起、点击空白关闭头部/底部可能有固定高度的模块(如标题栏、操作按钮)二、实现步骤第一步:创建基础底部弹窗推荐使用半模</div>
                    </li>
                    <li><a href="/article/1939441351703719936.htm"
                           title="超详细【WEB应用安全测试指南--蓝队安全测试1】--超级详细的安全测试渗透性测试知识点--可直接上手进行对应的安全测试!!!!!!" target="_blank">超详细【WEB应用安全测试指南--蓝队安全测试1】--超级详细的安全测试渗透性测试知识点--可直接上手进行对应的安全测试!!!!!!</a>
                        <span class="text-muted">生活De°咸鱼</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E4%B8%93%E6%A0%8F/1.htm">安全专栏</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E6%80%A7%E6%B5%8B%E8%AF%95/1.htm">安全性测试</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E5%A8%81%E8%83%81%E5%88%86%E6%9E%90/1.htm">安全威胁分析</a>
                        <div>一、概述1.1、编写目的结合公司的内部人员培养体系,本手册旨在为安全测试人员提供测试指导,安全测试人员通过查阅该指南可快速掌握Web应用安全测试,提高工作能力。1.2、使用范围本文适用于Web应用安全测试人员1.3、注意事项本文旨在为测试人员提供漏洞测试的基本思路,随着安全技术的发展,更多的新漏洞和测试方法将被爆出,安全测试人员应该具备不断学习新知识的能力。二、Web应用安全测试指南2.1、认证授</div>
                    </li>
                    <li><a href="/article/1939440721966723072.htm"
                           title="在 Ubuntu 18.04 环境下通过 qemu 运行 aarch64 linux 内核" target="_blank">在 Ubuntu 18.04 环境下通过 qemu 运行 aarch64 linux 内核</a>
                        <span class="text-muted">古道上的西风与瘦马</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>1.1Ubuntu环境(Ubuntu18.04LTS)$lsb_release-aNoLSBmodulesareavailable.DistributorID:UbuntuDescription:Ubuntu18.04LTSRelease:18.04Codename:bionic1.2安装基础软件sudoaptupdatesudoaptinstallflexbisonlibncurses5-dev</div>
                    </li>
                    <li><a href="/article/1939437822675054592.htm"
                           title="第一章 城镇道路工程 1.4 挡土墙施工" target="_blank">第一章 城镇道路工程 1.4 挡土墙施工</a>
                        <span class="text-muted">泽克</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%80%E5%BB%BA%E5%B8%82%E6%94%BF%E7%AB%A0%E8%8A%82%E5%A4%8D%E4%B9%A0/1.htm">一建市政章节复习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>1.4挡土墙施工1.4.1挡土墙结构形式及分类1.挡土墙类型1.重力式砌体挡土墙混凝土压顶、浆砌块石挡墙、浆砌块石基础依靠墙体自重抵挡土压力作用形式简单、就地取材、施工方便、造价低人工耗用量大、工效低、工期长、挡土墙高度受限2.重力式混凝土挡土墙依靠墙体自重抵抗土压力作用一般采用现浇混凝土或片石混凝土形式简单、就地取材、施工简便3.重力式钢筋混凝土挡土墙墙趾、凸榫、钢筋依靠墙体自重抵挡土压力作用墙</div>
                    </li>
                    <li><a href="/article/1939436308183183360.htm"
                           title="Python采集京东商品详情数据API接口概述及JSON数据格式参考" target="_blank">Python采集京东商品详情数据API接口概述及JSON数据格式参考</a>
                        <span class="text-muted">ID_18007905473</span>
<a class="tag" taget="_blank" href="/search/API/1.htm">API</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a>
                        <div>前言一、京东商品详情API接口概述京东开放平台提供了多种API接口,允许开发者通过编程方式获取商品详情数据。以下是常见的接口类型及功能:商品基础信息接口接口名称:jd.union.open.goods.query功能:获取商品标题、价格、图片、库存等基础信息。适用场景:商品列表展示、价格监控等。商品详情接口接口名称:jd.union.open.goods.detail.query功能:获取商品详细</div>
                    </li>
                    <li><a href="/article/1939436180357574656.htm"
                           title="Python采集京东商品详情API接口概述" target="_blank">Python采集京东商品详情API接口概述</a>
                        <span class="text-muted">ID_18007905473</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>前言京东开放平台提供了多种API接口用于获取商品详情信息,以下是主要的API接口概述及Python采集示例。一、主要商品详情API接口1.商品基础信息接口接口名称:jd.union.open.goods.query功能:获取商品标题、价格、图片、库存等基础信息2.商品详情接口接口名称:jd.union.open.goods.detail.query功能:获取商品详细描述、规格参数、售后政策等丰富信</div>
                    </li>
                    <li><a href="/article/1939435802467561472.htm"
                           title="Java 开发新手必看:Eclipse 基础操作" target="_blank">Java 开发新手必看:Eclipse 基础操作</a>
                        <span class="text-muted">Java大师兄学大数据AI应用开发</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>Java开发新手必看:Eclipse基础操作关键词:Java开发、Eclipse、基础操作、新手入门、集成开发环境摘要:本文专为Java开发新手打造,详细介绍了Eclipse这一强大集成开发环境的基础操作。从背景知识入手,逐步解释核心概念,深入剖析核心算法原理,通过项目实战展示具体操作,还介绍了实际应用场景、工具资源推荐以及未来发展趋势。旨在帮助新手快速上手Eclipse,开启Java开发之旅。背</div>
                    </li>
                    <li><a href="/article/1939434795205455872.htm"
                           title="【甲方安全视角】安全防御体系建设" target="_blank">【甲方安全视角】安全防御体系建设</a>
                        <span class="text-muted">秋说</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8%E5%BB%BA%E8%AE%BE/1.htm">安全建设</a>
                        <div>文章目录前言一、云安全防护能力第一阶段:搭建安全防护设施第二阶段:安全防护设施的精细化运营第三阶段:安全运营周报输出二、IT安全防护能力(一)办公网安全设施建设(二)办公网安全运营三、基础安全防护能力(一)物理安全(二)运维安全(三)安全应急响应四、总结前言安全防御体系是指各类防御能力的集合,体现了业界广泛认同的“纵深防御”理念。需要特别指出的是,防护模式若过于单一,并不构成真正意义上的纵深防御。</div>
                    </li>
                    <li><a href="/article/1939433532879335424.htm"
                           title="Spring Cloud 服务消息:事件驱动架构" target="_blank">Spring Cloud 服务消息:事件驱动架构</a>
                        <span class="text-muted">Java大师兄学大数据AI应用开发</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>SpringCloud服务消息:事件驱动架构关键词:SpringCloud、事件驱动架构、消息队列、微服务、异步通信、服务解耦、分布式系统摘要:本文将深入探讨SpringCloud中的事件驱动架构,解释其核心概念、工作原理和实际应用。通过生活化的比喻和详细的代码示例,您将了解如何使用SpringCloudStream等工具构建松耦合、高可用的分布式系统。文章涵盖从基础概念到项目实战的全方位内容,帮</div>
                    </li>
                    <li><a href="/article/1939431390332383232.htm"
                           title="前端面试题" target="_blank">前端面试题</a>
                        <span class="text-muted">被诅咒的猫</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">前端面试题</a>
                        <div>前端面试题:一个200*200的div在不同分辨率屏幕上下左右居中,用css实现div{position:absolute;width:200px;height:200px;top:50%;left:50%;margin-left:-100px;height:-100px;z-index:1000;}写一个左中右布局占满屏幕,其中左右两块是固定宽度200,中间自适应宽,要求先加载中间块,请写出结构</div>
                    </li>
                    <li><a href="/article/1939429496172113920.htm"
                           title="统一认证、限流、Mock 一网打尽!用 APISIX/Kong 让低代码平台更清爽" target="_blank">统一认证、限流、Mock 一网打尽!用 APISIX/Kong 让低代码平台更清爽</a>
                        <span class="text-muted">网罗开发</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%88%98%E6%BA%90%E7%A0%81/1.htm">实战源码</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/kong/1.htm">kong</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a>
                        <div>网罗开发(小红书、快手、视频号同名)  大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、HarmonyOS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者:《ESP32-C3物联网工程开发实战》图书作者:《SwiftUI入门,进阶与实战》超级个体:CO</div>
                    </li>
                    <li><a href="/article/1939427226445475840.htm"
                           title="【高频考点精讲】手写下拉选择组件:从点击展开到搜索过滤,实现select的增强版" target="_blank">【高频考点精讲】手写下拉选择组件:从点击展开到搜索过滤,实现select的增强版</a>
                        <span class="text-muted">全栈老李技术面试</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%AB%98%E9%A2%91%E8%80%83%E7%82%B9%E7%B2%BE%E8%AE%B2/1.htm">前端高频考点精讲</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a>
                        <div>手写下拉选择组件:从点击展开到搜索过滤,实现select的增强版‍作者:全栈老李更新时间:2025年5月‍适合人群:前端初学者、进阶开发者版权:本文由全栈老李原创,转载请注明出处。今天咱们聊聊如何手写一个功能完善的下拉选择组件。相信不少前端er都用过ElementUI或者AntDesign的Select组件,但你知道它们底层是怎么实现的吗?老李今天就带大家从零开始,实现一个支持点击展开、搜索过滤的</div>
                    </li>
                    <li><a href="/article/1939426468635406336.htm"
                           title="ruby on rails_Ruby,Rails和冒名顶替综合症,作者Glenn Goodrich" target="_blank">ruby on rails_Ruby,Rails和冒名顶替综合症,作者Glenn Goodrich</a>
                        <span class="text-muted">culi3118</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>rubyonrailsInthisepisodeoftheVersioningShow,TimandDavidarejoinedbyGlennGoodrich,akaRuprict,adeveloperbydayandSitePoint’sRubyChanneleditorbynight.TheydiscussthebenefitsofRuby,buildingwebsiteswithRails,</div>
                    </li>
                    <li><a href="/article/1939424827811098624.htm"
                           title="TCP 缓冲区核心机制" target="_blank">TCP 缓冲区核心机制</a>
                        <span class="text-muted">FHKHH</span>
<a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>一、TCP缓冲区核心机制1.发送与接收缓冲区发送缓冲区:当应用程序调用send()或write()函数时,数据从应用进程复制到内核的发送缓冲区。TCP协议负责将这些数据分段并发送。例如,Web服务器向客户端发送网页数据时,应用程序将内容传递到发送缓冲区,TCP再将其分割成合适大小的报文段进行传输。接收缓冲区:接收端将收到的数据存入内核的接收缓冲区,应用程序调用recv()或read()函数从中读取</div>
                    </li>
                    <li><a href="/article/1939424071150268416.htm"
                           title="前端react面试题之实现网页多选搜索框" target="_blank">前端react面试题之实现网页多选搜索框</a>
                        <span class="text-muted">烟雨-yaya</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a>
                        <div>需求提供100位用户信息。其用户信息含:{id:1,age:42,name:'张小强',address:"北京"},;要求1:需要设计可以多选择来筛选得到指点条件用户表,可以选择=>各阶段年龄端或者不同地区的。选择的条件,可以清空;要求2:选择的条件,需要在页面路由上呈现;方便其他用户copy,可以查询到一样的结果;实例网页实现实现需要提前下载相关依赖哈,nanoidimportReact,{Fr</div>
                    </li>
                    <li><a href="/article/1939423441484574720.htm"
                           title="python-can + can-isotp + udsoncan 实现基础的UDS诊断功能;附代码" target="_blank">python-can + can-isotp + udsoncan 实现基础的UDS诊断功能;附代码</a>
                        <span class="text-muted">dujunqiu</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1:功能说明在网上搜了一下python-can+udsoncan的使用说明,发现都是很笼统的介绍,没有详细的使用说明;下面根据我自己的使用经验,来给大家介绍一下;2:源代码介绍这里主要修改的配置是“bus1=can.interface.Bus(interface=‘canalystii’,channel=0,bitrate=500000)”这一行代码,需要根据实际使用的CAN盒进行配置;详细的代码</div>
                    </li>
                    <li><a href="/article/1939422181683425280.htm"
                           title="Java项目实现Excel导出(Hutool)" target="_blank">Java项目实现Excel导出(Hutool)</a>
                        <span class="text-muted">xwh-</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/excel/1.htm">excel</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a>
                        <div>官网:Excel生成-ExcelWriter(hutool.cn)1.使用Hutool工具实现Excel导出(.xlsx格式)业务场景:使用SpringCloud+mysql+mybatis-plus需要将数据库中的数据导出到Excel文件中前端为Vue2第零步:导入依赖(用于生成Excel文件)com.alibabaeasyexcel3.0.5(用于处理MicrosoftOffice格式文件)o</div>
                    </li>
                    <li><a href="/article/1939421174400348160.htm"
                           title="DAY 41 简单CNN" target="_blank">DAY 41 简单CNN</a>
                        <span class="text-muted">冬天给予的预感</span>
<a class="tag" taget="_blank" href="/search/cnn/1.htm">cnn</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a>
                        <div>知识回顾数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率卷积操作常见流程如下:1.输入→卷积层→Batch归一化层(可选)→池化层→激活函数→下一层Flatten->Dense(withDropout,可选)->Dense(Output)importtorchimporttorch.nnasnnimpo</div>
                    </li>
                    <li><a href="/article/1939420922222014464.htm"
                           title="SerDes学习-提纲" target="_blank">SerDes学习-提纲</a>
                        <span class="text-muted">Xuan.Yang</span>
<a class="tag" taget="_blank" href="/search/serdes/1.htm">serdes</a><a class="tag" taget="_blank" href="/search/serdes/1.htm">serdes</a><a class="tag" taget="_blank" href="/search/%E6%B7%B7%E5%90%88%E4%BF%A1%E5%8F%B7%E7%94%B5%E8%B7%AF/1.htm">混合信号电路</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E5%8F%B7%E5%AE%8C%E6%95%B4%E6%80%A7/1.htm">信号完整性</a>
                        <div>#记录一下学习serdes的笔记首先已有PLL的学习基础,国内serdes体系书籍比较少,大部分外文中文课程:b站,jrilee老师PLL、AIC、equalizer、CDR等均有讲解,较为系统,可按顺序学习,附主页链接:https://space.bilibili.com/1629031600/listsserdes两个很重要的东西PLLCDRDataLink/SerDesAmplifiersl</div>
                    </li>
                    <li><a href="/article/1939418024868114432.htm"
                           title="Python打卡训练营-Day41-简单CNN" target="_blank">Python打卡训练营-Day41-简单CNN</a>
                        <span class="text-muted">traMpo1ine</span>
<a class="tag" taget="_blank" href="/search/cnn/1.htm">cnn</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a>
                        <div>@浙大疏锦行知识回顾数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率卷积操作常见流程如下:1.输入→卷积层→Batch归一化层(可选)→池化层→激活函数→下一层Flatten->Dense(withDropout,可选)->Dense(Output)这里相关的概念比较多,如果之前没有学习过复试班强化班中</div>
                    </li>
                    <li><a href="/article/1939414874085978112.htm"
                           title="【vue导入导出Excel】vue简单实现导出和导入复杂表头excel表格功能【纯前端版本和配合后端版本】" target="_blank">【vue导入导出Excel】vue简单实现导出和导入复杂表头excel表格功能【纯前端版本和配合后端版本】</a>
                        <span class="text-muted">2401_84433535</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/excel/1.htm">excel</a>
                        <div>### 配合后端的两个方法 因为上面的纯前端写法有一个问题,就是有分页的时候我们没法拿到数据。或者数据太大了我们下载实在是有点慢和卡。所以基本上工作中都是后端生成下载链接导出的。这里再分享两个方法。1,[a标签](https://bbs.csdn.net/topics/618166371)下载这种方法核心就是后端直接生成下载链接,前端只需要生成A标签然后下载就行了。较为常用的一个daochu(){</div>
                    </li>
                    <li><a href="/article/1939411220696199168.htm"
                           title="AWS中的 CloudFormation" target="_blank">AWS中的 CloudFormation</a>
                        <span class="text-muted">等待的L先生</span>
<a class="tag" taget="_blank" href="/search/aws/1.htm">aws</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>AWS中的CloudFormation1.CloudFormation是什么?AWSCloudFormation是亚马逊科技(AWS)提供的一项服务,允许用户通过模板来描述和配置,从而实现基础设施即代码(InfrastructureasCode,lac)。CloudFormation使用JSON或者YAML文件编写的模板来定义一组AWS资源的集合,称为“堆栈”,这些资源可以包括EC2实例,S3存储</div>
                    </li>
                    <li><a href="/article/1939405803077300224.htm"
                           title="假如你从现在开始学习软件测试,需要多久才能学会呢?" target="_blank">假如你从现在开始学习软件测试,需要多久才能学会呢?</a>
                        <span class="text-muted">AIZHINAN</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>首先,不要去网上找那些零零碎碎的教程,很难学懂!你可以根据这个学习大纲定计划只要3-6个月就可以掌握软件测试,升职涨薪不在话下:1.基础阶段:先搞懂测试理论、用例设计,会用Jira写Bug;2.中级阶段:学SQL查数据、Linux看日志,Postman测接口,再用Selenium玩自动化;3.进阶阶段:搭Pytest框架、用JMeter压测,安全测试搞BurpSuite;4.扩展技能:Python</div>
                    </li>
                    <li><a href="/article/1939405801810620416.htm"
                           title="关于自动化测试" target="_blank">关于自动化测试</a>
                        <span class="text-muted">AIZHINAN</span>
<a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a>
                        <div>B站讲的最好的自动化测试教程,工具+框架附项目实战一套速通,零基础完全轻松掌握!自动化测试课程、web/app/接口概述常见的三类自动化测试有:单元测试,集成测试以及功能测试。单元测试单元测试是一个白盒测试,一般是针对一个方法单元进行的测试,单元测试要求运行快,编写简单。所以一般单元测试有这么一些特质:不连接数据库不访问磁盘文件不访问远程网络能够在很短时间内运行完毕(比如三秒内)集成测试集成测试可</div>
                    </li>
                    <li><a href="/article/1939405802230050816.htm"
                           title="软件测试面试前该准备些什么?" target="_blank">软件测试面试前该准备些什么?</a>
                        <span class="text-muted">AIZHINAN</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E9%9D%A2%E8%AF%95/1.htm">软件测试面试</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E9%9D%A2%E7%BB%8F/1.htm">软件测试面经</a><a class="tag" taget="_blank" href="/search/%E7%AE%80%E5%8E%86%E5%8C%85%E8%A3%85/1.htm">简历包装</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7/1.htm">面试技巧</a>
                        <div>在软件测试面试前,充分的准备可以显著提升你的信心和表现。以下是需要重点关注的准备方向,分为技术能力、项目经验、面试技巧和软技能四个部分:一、技术能力准备基础理论软件测试基本概念:测试类型(功能、性能、安全、兼容性等)、测试阶段(单元测试、集成测试、系统测试等)。经典面试题:黑盒vs白盒测试的区别?什么是边界值分析、等价类划分?Bug的生命周期是怎样的?如何设计测试用例?(举例:测试一个登录页面)测</div>
                    </li>
                    <li><a href="/article/1939405675494961152.htm"
                           title="主流接口测试框架对比" target="_blank">主流接口测试框架对比</a>
                        <span class="text-muted">AIZHINAN</span>
<a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95/1.htm">接口测试</a><a class="tag" taget="_blank" href="/search/jmeter/1.htm">jmeter</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88/1.htm">软件测试工程师</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6/1.htm">测试框架</a>
                        <div>2025年最新jmeter接口测试完整版教程,零基础也能轻松掌握,用jmeter实现接口测试!JMeter接口测试、公司计划系统的开展接口自动化测试,需要我这边调研一下主流的接口测试框架给后端测试(主要测试接口)的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求,看哪个框架更适合我们。需求1、接口编写方便。2、方便调试接口。3、支持数据初始化。4、生成测试报告。5、支持</div>
                    </li>
                    <li><a href="/article/1939401646320709632.htm"
                           title="学习三维动画心得" target="_blank">学习三维动画心得</a>
                        <span class="text-muted">2501_92205961</span>
<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%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a>
                        <div>在大二学年的三维动画设计学习进程中,我围绕3dsMax和Blender两大核心软件展开深入钻研,并在此基础上探索技术应用与创新。不仅熟练掌握了基础操作,还深入到代码编写与复杂技术问题解决领域,逐步构建起系统的三维动画设计知识与技能体系,以下是详细的学习总结。一、3dsMax的深度学习与技术实践(一)高级建模与脚本优化在3dsMax的学习中,基础建模掌握后,我开始挑战高级建模技术。利用NURBS建模</div>
                    </li>
                    <li><a href="/article/1939394969081016320.htm"
                           title="编译UltraleapTrackingWebSocket" target="_blank">编译UltraleapTrackingWebSocket</a>
                        <span class="text-muted">cheniie</span>
<a class="tag" taget="_blank" href="/search/%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/1.htm">解决方案</a><a class="tag" taget="_blank" href="/search/leapmotion/1.htm">leapmotion</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a>
                        <div>最近要在项目中用到LeapMotion,无意中发现了一个Go语言的LeapMotion库:https://gobot.io/documentation/platforms/leapmotion/示例代码看起来很简单,但是要实际运行起来还需要一些条件。在示例代码中,我们看到它连接的是6437端口,这其实是一种比较老的LeapMotion使用方式了,6437实际上是一个websocket端口,Leap</div>
                    </li>
                    <li><a href="/article/1939392573474926592.htm"
                           title="python 爬虫 selenium作用_详解python爬虫利器Selenium使用方法" target="_blank">python 爬虫 selenium作用_详解python爬虫利器Selenium使用方法</a>
                        <span class="text-muted">weixin_39585974</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/selenium%E4%BD%9C%E7%94%A8/1.htm">selenium作用</a>
                        <div>简介:用pyhon爬取动态页面时普通的urllib2无法实现,例如下面的京东首页,随着滚动条的下拉会加载新的内容,而urllib2就无法抓取这些内容,此时就需要今天的主角selenium。Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、MozillaFirefox、MozillaSuite等。使用它爬取页面</div>
                    </li>
                                <li><a href="/article/54.htm"
                                       title="JAVA中的Enum" target="_blank">JAVA中的Enum</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE/1.htm">枚举</a>
                                    <div>Enum是计算机编程语言中的一种数据类型---枚举类型。 在实际问题中,有些变量的取值被限定在一个有限的范围内。       例如,一个星期内只有七天 我们通常这样实现上面的定义: 
public String monday;
public String tuesday;
public String wensday;
public String thursday</div>
                                </li>
                                <li><a href="/article/181.htm"
                                       title="赶集网mysql开发36条军规" target="_blank">赶集网mysql开发36条军规</a>
                                    <span class="text-muted">Bill_chen</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E4%B8%9A%E5%8A%A1%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">业务架构设计</a><a class="tag" taget="_blank" href="/search/mysql%E8%B0%83%E4%BC%98/1.htm">mysql调优</a><a class="tag" taget="_blank" href="/search/mysql%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">mysql性能优化</a>
                                    <div>(一)核心军规   (1)不在数据库做运算      cpu计算务必移至业务层;   (2)控制单表数据量      int型不超过1000w,含char则不超过500w;      合理分表;      限制单库表数量在300以内;   (3)控制列数量      字段少而精,字段数建议在20以内</div>
                                </li>
                                <li><a href="/article/308.htm"
                                       title="Shell test命令" target="_blank">Shell test命令</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">字符串</a><a class="tag" taget="_blank" href="/search/test/1.htm">test</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E5%AD%97/1.htm">数字</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E6%AF%94%E8%BE%83/1.htm">文件比较</a>
                                    <div>Shell test命令 
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。  数值测试    参数 说明   -eq 等于则为真   -ne 不等于则为真   -gt 大于则为真   -ge 大于等于则为真   -lt 小于则为真   -le 小于等于则为真    
实例演示: 
num1=100
num2=100if test $[num1]</div>
                                </li>
                                <li><a href="/article/435.htm"
                                       title="XFire框架实现WebService(二)" target="_blank">XFire框架实现WebService(二)</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a>
                                    <div>   有了XFire框架实现WebService(一),就可以继续开发WebService的简单应用。 
Webservice的服务端(WEB工程): 
两个java bean类: 
Course.java 
   package cn.com.bean; 
public class Course { 
    private </div>
                                </li>
                                <li><a href="/article/562.htm"
                                       title="重绘之画图板" target="_blank">重绘之画图板</a>
                                    <span class="text-muted">朱辉辉33</span>
<a class="tag" taget="_blank" href="/search/%E7%94%BB%E5%9B%BE%E6%9D%BF/1.htm">画图板</a>
                                    <div>       上次博客讲的五子棋重绘比较简单,因为只要在重写系统重绘方法paint()时加入棋盘和棋子的绘制。这次我想说说画图板的重绘。 
       画图板重绘难在需要重绘的类型很多,比如说里面有矩形,园,直线之类的,所以我们要想办法将里面的图形加入一个队列中,这样在重绘时就</div>
                                </li>
                                <li><a href="/article/689.htm"
                                       title="Java的IO流" target="_blank">Java的IO流</a>
                                    <span class="text-muted">西蜀石兰</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>刚学Java的IO流时,被各种inputStream流弄的很迷糊,看老罗视频时说想象成插在文件上的一根管道,当初听时觉得自己很明白,可到自己用时,有不知道怎么代码了。。。 
每当遇到这种问题时,我习惯性的从头开始理逻辑,会问自己一些很简单的问题,把这些简单的问题想明白了,再看代码时才不会迷糊。 
 
IO流作用是什么? 
答:实现对文件的读写,这里的文件是广义的; 
 
Java如何实现程序到文件</div>
                                </li>
                                <li><a href="/article/816.htm"
                                       title="No matching PlatformTransactionManager bean found for qualifier 'add' - neither" target="_blank">No matching PlatformTransactionManager bean found for qualifier 'add' - neither</a>
                                    <span class="text-muted">林鹤霄</span>

                                    <div>java.lang.IllegalStateException: No matching PlatformTransactionManager bean found for qualifier 'add' - neither qualifier match nor bean name match! 
  
网上找了好多的资料没能解决,后来发现:项目中使用的是xml配置的方式配置事务,但是</div>
                                </li>
                                <li><a href="/article/943.htm"
                                       title="Row size too large (> 8126). Changing some columns to TEXT or BLOB" target="_blank">Row size too large (> 8126). Changing some columns to TEXT or BLOB</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/column/1.htm">column</a>
                                    <div>原文:http://stackoverflow.com/questions/15585602/change-limit-for-mysql-row-size-too-large 
  
异常信息: 
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAM</div>
                                </li>
                                <li><a href="/article/1070.htm"
                                       title="JS 格式化时间" target="_blank">JS 格式化时间</a>
                                    <span class="text-muted">alxw4616</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>/**
 * 格式化时间 2013/6/13 by 半仙 alxw4616@msn.com
 * 需要 pad 函数
 * 接收可用的时间值.
 * 返回替换时间占位符后的字符串
 *
 * 时间占位符:年 Y 月 M 日 D 小时 h 分 m 秒 s 重复次数表示占位数
 * 如 YYYY 4占4位 YY 占2位<p></p>
 * MM DD hh mm</div>
                                </li>
                                <li><a href="/article/1197.htm"
                                       title="队列中数据的移除问题" target="_blank">队列中数据的移除问题</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E9%98%9F%E5%88%97%E7%A7%BB%E9%99%A4/1.htm">队列移除</a>
                                    <div>  
   队列的移除一般都是使用的remov();都可以移除的,但是在昨天做线程移除的时候出现了点问题,没有将遍历出来的全部移除,  代码如下; 
  
   // 
package com.Thread0715.com;

import java.util.ArrayList;

public class Threa</div>
                                </li>
                                <li><a href="/article/1324.htm"
                                       title="Runnable接口使用实例" target="_blank">Runnable接口使用实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/Runnable/1.htm">Runnable</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>Runnable接口 
a.       该接口只有一个方法:public void run(); 
b.       实现该接口的类必须覆盖该run方法 
c.       实现了Runnable接口的类并不具有任何天</div>
                                </li>
                                <li><a href="/article/1451.htm"
                                       title="oracle里的extend详解" target="_blank">oracle里的extend详解</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/extend/1.htm">extend</a>
                                    <div>扩展已知的数组空间,例: 
DECLARE
  TYPE CourseList IS TABLE OF VARCHAR2(10);
  courses CourseList;
BEGIN
  --   初始化数组元素,大小为3
  courses := CourseList('Biol   4412 ', 'Psyc   3112 ', 'Anth   3001 ');
  --   </div>
                                </li>
                                <li><a href="/article/1578.htm"
                                       title="【httpclient】httpclient发送表单POST请求" target="_blank">【httpclient】httpclient发送表单POST请求</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a>
                                    <div>浏览器Form Post请求 
浏览器可以通过提交表单的方式向服务器发起POST请求,这种形式的POST请求不同于一般的POST请求 
1. 一般的POST请求,将请求数据放置于请求体中,服务器端以二进制流的方式读取数据,HttpServletRequest.getInputStream()。这种方式的请求可以处理任意数据形式的POST请求,比如请求数据是字符串或者是二进制数据 
2. Form </div>
                                </li>
                                <li><a href="/article/1705.htm"
                                       title="【Hive十三】Hive读写Avro格式的数据" target="_blank">【Hive十三】Hive读写Avro格式的数据</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a>
                                    <div> 1. 原始数据 
hive> select * from word; 
OK
1	MSN  
10	QQ  
100	Gtalk  
1000	Skype  
  
  
 2. 创建avro格式的数据表 
  
hive> CREATE TABLE avro_table(age INT, name STRING)STORE</div>
                                </li>
                                <li><a href="/article/1832.htm"
                                       title="nginx+lua+redis自动识别封解禁频繁访问IP" target="_blank">nginx+lua+redis自动识别封解禁频繁访问IP</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>在站点遇到攻击且无明显攻击特征,造成站点访问慢,nginx不断返回502等错误时,可利用nginx+lua+redis实现在指定的时间段 内,若单IP的请求量达到指定的数量后对该IP进行封禁,nginx返回403禁止访问。利用redis的expire命令设置封禁IP的过期时间达到在 指定的封禁时间后实行自动解封的目的。 
一、安装环境: 
 
 CentOS x64 release 6.4(Fin</div>
                                </li>
                                <li><a href="/article/1959.htm"
                                       title="java-二叉树的遍历-先序、中序、后序(递归和非递归)、层次遍历" target="_blank">java-二叉树的遍历-先序、中序、后序(递归和非递归)、层次遍历</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;


public class BinTreeTraverse {
	//private int[] array={ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	private int[] array={ 10,6,</div>
                                </li>
                                <li><a href="/article/2086.htm"
                                       title="Spring源码学习-XML 配置方式的IoC容器启动过程分析" target="_blank">Spring源码学习-XML 配置方式的IoC容器启动过程分析</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a>
                                    <div>以FileSystemXmlApplicationContext为例,把Spring IoC容器的初始化流程走一遍: 
 

ApplicationContext context = new FileSystemXmlApplicationContext
            ("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml&q</div>
                                </li>
                                <li><a href="/article/2213.htm"
                                       title="[科研与项目]民营企业请慎重参与军事科技工程" target="_blank">[科研与项目]民营企业请慎重参与军事科技工程</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A/1.htm">企业</a>
                                    <div> 
 
     军事科研工程和项目 并非要用最先进,最时髦的技术,而是要做到“万无一失” 
 
   而民营科技企业在搞科技创新工程的时候,往往考虑的是技术的先进性,而对先进技术带来的风险考虑得不够,在今天提倡军民融合发展的大环境下,这种“万无一失”和“时髦性”的矛盾会日益凸显。。。。。。所以请大家在参与任何重大的军事和政府项目之前,对</div>
                                </li>
                                <li><a href="/article/2340.htm"
                                       title="spring 定时器-两种方式" target="_blank">spring 定时器-两种方式</a>
                                    <span class="text-muted">cuityang</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E6%97%B6%E5%99%A8/1.htm">定时器</a>
                                    <div>方式一: 
间隔一定时间 运行 
 
<bean id="updateSessionIdTask" class="com.yang.iprms.common.UpdateSessionTask" autowire="byName" /> 
 
 <bean id="updateSessionIdSchedule</div>
                                </li>
                                <li><a href="/article/2467.htm"
                                       title="简述一下关于BroadView站点的相关设计" target="_blank">简述一下关于BroadView站点的相关设计</a>
                                    <span class="text-muted">damoqiongqiu</span>
<a class="tag" taget="_blank" href="/search/view/1.htm">view</a>
                                    <div>终于弄上线了,累趴,戳这里http://www.broadview.com.cn 
  
简述一下相关的技术点 
  
前端:jQuery+BootStrap3.2+HandleBars,全站Ajax(貌似对SEO的影响很大啊!怎么破?),用Grunt对全部JS做了压缩处理,对部分JS和CSS做了合并(模块间存在很多依赖,全部合并比较繁琐,待完善)。 
  
后端:U</div>
                                </li>
                                <li><a href="/article/2594.htm"
                                       title="运维 PHP问题汇总" target="_blank">运维 PHP问题汇总</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/windows2003/1.htm">windows2003</a>
                                    <div>1、Dede(织梦)发表文章时,内容自动添加关键字显示空白页 
解决方法: 
后台>系统>系统基本参数>核心设置>关键字替换(是/否),这里选择“是”。 
后台>系统>系统基本参数>其他选项>自动提取关键字,这里选择“是”。 
  
2、解决PHP168超级管理员上传图片提示你的空间不足 
网站是用PHP168做的,反映使用管理员在后台无法</div>
                                </li>
                                <li><a href="/article/2721.htm"
                                       title="mac 下 安装php扩展 - mcrypt" target="_blank">mac 下 安装php扩展 - mcrypt</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,phpMyAdmin依赖这个PHP扩展,具体如下: 
 
  
  下载并解压libmcrypt-2.5.8.tar.gz。 
  在终端执行如下命令:  tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure --disable-posix-threads --</div>
                                </li>
                                <li><a href="/article/2848.htm"
                                       title="MongoDB更新文档 [四]" target="_blank">MongoDB更新文档 [四]</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/Mongodb%E6%9B%B4%E6%96%B0%E6%96%87%E6%A1%A3/1.htm">Mongodb更新文档</a>
                                    <div>MongoDB更新文档 
转载请出自出处:http://eksliang.iteye.com/blog/2174104 
MongoDB对文档的CURD,前面的博客简单介绍了,但是对文档更新篇幅比较大,所以这里单独拿出来。 
语法结构如下: 
db.collection.update( criteria, objNew, upsert, multi) 
参数含义    参数   </div>
                                </li>
                                <li><a href="/article/2975.htm"
                                       title="Linux下的解压,移除,复制,查看tomcat命令" target="_blank">Linux下的解压,移除,复制,查看tomcat命令</a>
                                    <span class="text-muted">y806839048</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                                    <div>重复myeclipse生成webservice有问题删除以前的,干净 
 
 1、先切换到:cd usr/local/tomcat5/logs 
 
2、tail -f catalina.out 
 
3、这样运行时就可以实时查看运行日志了 
 
 
 
 
Ctrl+c 是退出tail命令。 
 有问题不明的先注掉 
   cp /opt/tomcat-6.0.44/webapps/g</div>
                                </li>
                                <li><a href="/article/3102.htm"
                                       title="Spring之使用事务缘由(3-XML实现)" target="_blank">Spring之使用事务缘由(3-XML实现)</a>
                                    <span class="text-muted">ihuning</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>  
用事务通知声明式地管理事务 
  
事务管理是一种横切关注点。为了在 Spring 2.x 中启用声明式事务管理,可以通过 tx Schema 中定义的 <tx:advice> 元素声明事务通知,为此必须事先将这个 Schema 定义添加到 <beans> 根元素中去。声明了事务通知后,就需要将它与切入点关联起来。由于事务通知是在 <aop:</div>
                                </li>
                                <li><a href="/article/3229.htm"
                                       title="GCD使用经验与技巧浅谈" target="_blank">GCD使用经验与技巧浅谈</a>
                                    <span class="text-muted">啸笑天</span>
<a class="tag" taget="_blank" href="/search/GC/1.htm">GC</a>
                                    <div>前言 
GCD(Grand Central Dispatch)可以说是Mac、iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧。 
dispatch_once_t必须是全局或static变量 
这一条算是“老生常谈”了,但我认为还是有必要强调一次,毕竟非全局或非static的dispatch_once_t变量在使用时会导致非常不好排查的bug,正确的如下:        1  </div>
                                </li>
                                <li><a href="/article/3356.htm"
                                       title="linux(Ubuntu)下常用命令备忘录1" target="_blank">linux(Ubuntu)下常用命令备忘录1</a>
                                    <span class="text-muted">macroli</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                                    <div>在使用下面的命令是可以通过--help来获取更多的信息1,查询当前目录文件列表:ls 
 
 ls命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参数运行以查询更多的信息:  
 ls / 显示/.下的所有文件和目录  
 ls -l 给出文件或者文件夹的详细信息 
 ls -a 显示所有文件,包括隐藏文</div>
                                </li>
                                <li><a href="/article/3483.htm"
                                       title="nodejs同步操作mysql" target="_blank">nodejs同步操作mysql</a>
                                    <span class="text-muted">qiaolevip</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a>
                                    <div>// db-util.js
var mysql = require('mysql');
var pool = mysql.createPool({
  connectionLimit : 10,
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'test',
  port: 3306
});

</div>
                                </li>
                                <li><a href="/article/3610.htm"
                                       title="一起学Hive系列文章" target="_blank">一起学Hive系列文章</a>
                                    <span class="text-muted">superlxw1234</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/Hive%E5%85%A5%E9%97%A8/1.htm">Hive入门</a>
                                    <div>  
[一起学Hive]系列文章 目录贴,入门Hive,持续更新中。 
  
[一起学Hive]之一—Hive概述,Hive是什么 
[一起学Hive]之二—Hive函数大全-完整版 
[一起学Hive]之三—Hive中的数据库(Database)和表(Table) 
[一起学Hive]之四-Hive的安装配置 
[一起学Hive]之五-Hive的视图和分区 
[一起学Hive</div>
                                </li>
                                <li><a href="/article/3737.htm"
                                       title="Spring开发利器:Spring Tool Suite 3.7.0 发布" target="_blank">Spring开发利器:Spring Tool Suite 3.7.0 发布</a>
                                    <span class="text-muted">wiselyman</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>Spring Tool Suite(简称STS)是基于Eclipse,专门针对Spring开发者提供大量的便捷功能的优秀开发工具。 
  
在3.7.0版本主要做了如下的更新: 
  
 
 将eclipse版本更新至Eclipse Mars 4.5 GA 
 Spring Boot(JavaEE开发的颠覆者集大成者,推荐大家学习)的配置语言YAML编辑器的支持(包含自动提示,</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>