﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-疯狂 --专注java,开源,架构,项目管理-随笔分类-xml</title><link>http://www.blogjava.net/freeman1984/category/43702.html</link><description>         
        STANDING ON THE SHOULDERS OF GIANTS</description><language>zh-cn</language><lastBuildDate>Fri, 11 Nov 2011 12:14:00 GMT</lastBuildDate><pubDate>Fri, 11 Nov 2011 12:14:00 GMT</pubDate><ttl>60</ttl><item><title>xmlrpc介绍和使用</title><link>http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 11 Nov 2011 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/363526.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/363526.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/363526.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: xmlrpc介绍，并模拟blogjava的xml-rpc api写个例子。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html'>阅读全文</a><img src ="http://www.blogjava.net/freeman1984/aggbug/363526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-11-11 14:58 <a href="http://www.blogjava.net/freeman1984/archive/2011/11/11/363526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>object&lt;-&gt;XML之jaxb </title><link>http://www.blogjava.net/freeman1984/archive/2011/11/11/363522.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 11 Nov 2011 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/11/11/363522.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/363522.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/11/11/363522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/363522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/363522.html</trackback:ping><description><![CDATA[<div>上一篇<a href="http://www.blogjava.net/freeman1984/archive/2010/01/29/311206.html">http://www.blogjava.net/freeman1984/archive/2010/01/29/311206.html</a>简单的介绍了用Simple来进行xml和bean之间的转换。这里主要写个小例子来介绍jdk自带的jaxb来进行bean到xml之间的转换。<br />&nbsp;<br />JAXB（Java API for XML Binding），提供了一个快速便捷的方式将Java对象与XML进行转换。在JAX-WS（Java的WebService规范之一）中，JDK1.6 自带的版本JAX-WS2.1，其底层支持就是JAXB。&nbsp;<br />&nbsp;&nbsp;&nbsp; JAXB 可以实现Java对象与XML的相互转换，在JAXB中，将一个Java对象转换为XML的过程称之为Marshal，将XML转换为Java对象的过程称之为UnMarshal。我们可以通过在 Java 类中标注注解的方式将一个Java对象绑定到一段XML，也就是说，在Java类中标注一些注解，这些注解定义了如何将这个类转换为XML，怎么转换，以及一段XML如何被解析成这个类所定义的对象；也可以使用JAXB的XJC工具，通过定义schema的方式实现Java对象与XML的绑定。 <br />下面是个简单xml和object互相转换的例子： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">@XmlAccessorType(XmlAccessType.FIELD)<br /><img id="Codehighlighter1_78_100_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_100_Open_Text.style.display='none'; Codehighlighter1_78_100_Closed_Image.style.display='inline'; Codehighlighter1_78_100_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_78_100_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_78_100_Closed_Text.style.display='none'; Codehighlighter1_78_100_Open_Image.style.display='inline'; Codehighlighter1_78_100_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif">@XmlType(name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">testUser</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;propOrder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_78_100_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_78_100_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">userName</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">email</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">)<br /><img id="Codehighlighter1_125_309_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_309_Open_Text.style.display='none'; Codehighlighter1_125_309_Closed_Image.style.display='inline'; Codehighlighter1_125_309_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_125_309_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_125_309_Closed_Text.style.display='none'; Codehighlighter1_125_309_Open_Image.style.display='inline'; Codehighlighter1_125_309_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestUser&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_125_309_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_125_309_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@XmlAttribute<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;String&nbsp;id;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@XmlElement(name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;String&nbsp;userName;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@XmlElement(name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">e-mail</span><span style="color: #000000">"</span><span style="color: #000000">)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;email;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;set<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.</span></div></span><br />1 从object--》xml<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_39_242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_242_Open_Text.style.display='none'; Codehighlighter1_39_242_Closed_Image.style.display='inline'; Codehighlighter1_39_242_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_39_242_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_39_242_Closed_Text.style.display='none'; Codehighlighter1_39_242_Open_Image.style.display='inline'; Codehighlighter1_39_242_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_39_242_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_39_242_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestUser&nbsp;test&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TestUser();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.setUserName(</span><span style="color: #000000">"</span><span style="color: #000000">疯狂joe</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.setId(</span><span style="color: #000000">"</span><span style="color: #000000">9001</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringWriter&nbsp;xml&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringWriter();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JAXB.marshal(test,xml);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(xml);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><br />打印：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;standalone</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">yes</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">testUser&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">9001</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">username</span><span style="color: #000000">&gt;</span><span style="color: #000000">疯狂joe</span><span style="color: #000000">&lt;/</span><span style="color: #000000">username</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">testUser</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>2 从xml--》object<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_39_281_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_281_Open_Text.style.display='none'; Codehighlighter1_39_281_Closed_Image.style.display='inline'; Codehighlighter1_39_281_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_39_281_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_39_281_Closed_Text.style.display='none'; Codehighlighter1_39_281_Open_Image.style.display='inline'; Codehighlighter1_39_281_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_39_281_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_39_281_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;testUser&nbsp;id=\</span><span style="color: #000000">"</span><span style="color: #000000">9001</span><span style="color: #000000">\</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;username&gt;疯狂joe&lt;/username&gt;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;/testUser&gt;</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringReader&nbsp;reader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringReader(x);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(JAXB.unmarshal(reader,TestUser.</span><span style="color: #0000ff">class</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>打印：<br />TestUser [email=null, id=9001, userName=疯狂joe]<br />下面是JAXB中主要的一些注解。 <br />@XmlRootElement&nbsp;&nbsp; 将一个Java类映射为一段XML的根节点 <br />参数：name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义这个根节点的名称&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namespace&nbsp;&nbsp; 定义这个根节点命名空间 <br />@XmlAccessorType&nbsp; 定义映射这个类中的何种类型需要映射到XML。可接收四个参数，分别是：&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlAccessType.FIELD：映射这个类中的所有字段到XML&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlAccessType.PROPERTY：映射这个类中的属性（get/set方法）到XML&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlAccessType.PUBLIC_MEMBER：将这个类中的所有public的field或property同时映射到XML（默认）&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlAccessType.NONE：不映射 <br />@XmlElement&nbsp; 指定一个字段或get/set方法映射到XML的节点。如，当一个类的XmlAccessorType 被标注为PROPERTY时，在某一个没有get/set方法的字段上标注此注解，即可将该字段映射到XML。 <br />参数：defaultValue&nbsp; 指定节点默认值&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定节点名称&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namespace&nbsp;&nbsp;&nbsp; 指定节点命名空间&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否必须（默认为false）&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nillable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该字段是否包含 nillable="true" 属性（默认为false）&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义该字段或属性的关联类型 <br />@XmlAttribute&nbsp; 指定一个字段或get/set方法映射到XML的属性。 <br />参数：name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定属性名称&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namespace&nbsp;&nbsp;&nbsp; 指定属性命名空间&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否必须（默认为false）<br />@XmlTransient&nbsp; 定义某一字段或属性不需要被映射为XML。如，当一个类的XmlAccessorType 被标注为PROPERTY时，在某一get/set方法的字段上标注此注解，那么该属性则不会被映射。<br />@XmlType&nbsp; 定义映射的一些相关规则 <br />参数：propOrder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定映射XML时的节点顺序&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; factoryClass&nbsp;&nbsp;&nbsp;&nbsp; 指定UnMarshal时生成映射类实例所需的工厂类，默认为这个类本身&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; factoryMethod&nbsp; 指定工厂类的工厂方法&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义XML Schema中type的名称&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定Schema中的命名空间 <br />@XmlElementWrapper&nbsp; 为数组元素或集合元素定义一个父节点。如，类中有一元素为List items，若不加此注解，该元素将被映射为&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;items&gt;...&lt;/items&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;items&gt;...&lt;/items&gt; <br />这种形式，此注解可将这个元素进行包装，如：&nbsp;<br />&nbsp;&nbsp;&nbsp; @XmlElementWrapper(name="items") <br />&nbsp;&nbsp;&nbsp; @XmlElement(name="item") <br />&nbsp;&nbsp;&nbsp; public List items; <br />将会生成这样的XML样式：&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;items&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item&gt;...&lt;/item&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item&gt;...&lt;/item&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;/items&gt; <br />@XmlJavaTypeAdapter&nbsp; 自定义某一字段或属性映射到XML的适配器。如，类中包含一个接口，我们可以定义一个适配器（继承自javax.xml.bind.annotation.adapters.XmlAdapter类），指定这个接口如何映射到XML。 <br /></div> <img src ="http://www.blogjava.net/freeman1984/aggbug/363522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-11-11 14:25 <a href="http://www.blogjava.net/freeman1984/archive/2011/11/11/363522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dom4j通过xpath查询xml (转)</title><link>http://www.blogjava.net/freeman1984/archive/2011/11/09/363271.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Wed, 09 Nov 2011 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2011/11/09/363271.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/363271.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2011/11/09/363271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/363271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/363271.html</trackback:ping><description><![CDATA[<ol><li>获取Document</li>
<ul><li>SAXReader saxReader = new SAXReader();</li><li>Document document = saxReader.read(FileUtil.getFileInputStream(fileName));<br /></li></ul></li><li>查询Element</li>
<ul><li>String xpath ="/composites/composite[@type='onDelete']";//查询属性type='ondDelete'的composite</li><li>List&lt;Element&gt; composites = document.selectNodes(xpath);<br /></li></ul></li><li>xpath语法</li></ol>
<div style="margin-left: 40px">
<div>
<h2>选取节点</h2>
<p>XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。</p>
<h3>下面列出了最有用的路径表达式：</h3>
<table>
<tbody>
<tr>
<th>表达式</th>
<th>描述</th></tr>
<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>
<h3>实例</h3>
<p>在下面的表格中，我们已列出了一些路径表达式以及表达式的结果：</p>
<table>
<tbody>
<tr>
<th>路径表达式</th>
<th>结果</th></tr>
<tr>
<td>bookstore</td>
<td>选取 bookstore 元素的所有子节点</td></tr>
<tr>
<td>/bookstore</td>
<td>
<p>选取根元素 bookstore</p>
<p>注释：假如路径起始于正斜杠( / )，则此路径始终代表到某元素的绝对路径！</p></td></tr>
<tr>
<td>bookstore/book</td>
<td>选取所有属于 bookstore 的子元素的 book 元素。</td></tr>
<tr>
<td>//book</td>
<td>选取所有 book 子元素，而不管它们在文档中的位置。</td></tr>
<tr>
<td>bookstore//book</td>
<td>选择所有属于 bookstore 元素的后代的 book 元素，而不管它们位于 bookstore 之下的什么位置。</td></tr>
<tr>
<td>//@lang</td>
<td>选取所有名为 lang 的属性。</td></tr></tbody></table></div>
<div>
<h2>谓语（Predicates）</h2>
<p>谓语用来查找某个特定的节点或者包含某个指定的值的节点。</p>
<p>谓语被嵌在方括号中。</p>
<h3>实例</h3>
<p>在下面的表格中，我们列出了带有谓语的一些路径表达式，以及表达式的结果：</p>
<table>
<tbody>
<tr>
<th>路径表达式</th>
<th>结果</th></tr>
<tr>
<td>/bookstore/book[1]</td>
<td>选取属于 bookstore 子元素的第一个 book 元素。</td></tr>
<tr>
<td>/bookstore/book[last()]</td>
<td>选取属于 bookstore 子元素的最后一个 book 元素。</td></tr>
<tr>
<td>/bookstore/book[last()-1]</td>
<td>选取属于 bookstore 子元素的倒数第二个 book 元素。</td></tr>
<tr>
<td>/bookstore/book[position()&lt;3]</td>
<td>选取最前面的两个属于 bookstore 元素的子元素的 book 元素。</td></tr>
<tr>
<td>//title[@lang]</td>
<td>选取所有拥有名为 lang 的属性的 title 元素。</td></tr>
<tr>
<td>//title[@lang='eng']</td>
<td>选取所有 title 元素，且这些元素拥有值为 eng 的 lang 属性。</td></tr>
<tr>
<td>/bookstore/book[price&gt;35.00]</td>
<td>选取所有 bookstore 元素的 book 元素，且其中的 price 元素的值须大于 35.00。</td></tr>
<tr>
<td>/bookstore/book[price&gt;35.00]/title</td>
<td>选取所有 bookstore 元素中的 book 元素的 title 元素，且其中的 price 元素的值须大于 35.00。</td></tr></tbody></table></div>
<div>
<h2>选取未知节点</h2>
<p>XPath 通配符可用来选取未知的 XML 元素。</p>
<table>
<tbody>
<tr>
<th>通配符</th>
<th>描述</th></tr>
<tr>
<td>*</td>
<td>匹配任何元素节点</td></tr>
<tr>
<td>@*</td>
<td>匹配任何属性节点</td></tr>
<tr>
<td>node()</td>
<td>匹配任何类型的节点</td></tr></tbody></table>
<h3>实例</h3>
<p>在下面的表格中，我们列出了一些路径表达式，以及这些表达式的结果：</p>
<table>
<tbody>
<tr>
<th>路径表达式</th>
<th>结果</th></tr>
<tr>
<td>/bookstore/*</td>
<td>选取 bookstore 元素的所有子节点</td></tr>
<tr>
<td>//*</td>
<td>选取文档中的所有元素</td></tr>
<tr>
<td>//title[@*]</td>
<td>选取所有带有属性的 title 元素。</td></tr></tbody></table></div>
<div>
<h2>选取若干路径</h2>
<p>通过在路径表达式中使用&#8220;|&#8221;运算符，您可以选取若干个路径。</p>
<h3>实例</h3>
<p>在下面的表格中，我们列出了一些路径表达式，以及这些表达式的结果：</p>
<table>
<tbody>
<tr>
<th>路径表达式</th>
<th>结果</th></tr>
<tr>
<td>//book/title | //book/price</td>
<td>选取所有 book 元素的 title 和 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></div><br /><br />
<div>
<h2>XPath 轴</h2>
<p>轴可定义某个相对于当前节点的节点集。</p>
<table>
<tbody>
<tr>
<th>轴名称</th>
<th>结果</th></tr>
<tr>
<td>ancestor</td>
<td>选取当前节点的所有先辈（父、祖父等）</td></tr>
<tr>
<td>ancestor-or-self</td>
<td>选取当前节点的所有先辈（父、祖父等）以及当前节点本身</td></tr>
<tr>
<td>attribute</td>
<td>选取当前节点的所有属性</td></tr>
<tr>
<td>child</td>
<td>选取当前节点的所有子元素。</td></tr>
<tr>
<td>descendant</td>
<td>选取当前节点的所有后代元素（子、孙等）。</td></tr>
<tr>
<td>descendant-or-self</td>
<td>选取当前节点的所有后代元素（子、孙等）以及当前节点本身。</td></tr>
<tr>
<td>following</td>
<td>选取文档中当前节点的结束标签之后的所有节点。</td></tr>
<tr>
<td>namespace</td>
<td>选取当前节点的所有命名空间节点</td></tr>
<tr>
<td>parent</td>
<td>选取当前节点的父节点。</td></tr>
<tr>
<td>preceding</td>
<td>选取文档中当前节点的开始标签之前的所有节点。</td></tr>
<tr>
<td>preceding-sibling</td>
<td>选取当前节点之前的所有同级节点。</td></tr>
<tr>
<td>self</td>
<td>选取当前节点。</td></tr></tbody></table></div>
<div>
<h2>位置路径表达式</h2>
<p>位置路径可以是绝对的，也可以是相对的。</p>
<p>绝对路径起始于正斜杠( / )，而相对路径不会这样。在两种情况中，位置路径均包括一个或多个步，每个步均被斜杠分割：</p>
<h3>绝对位置路径：</h3><pre>/step/step/...</pre>
<h3>相对位置路径：</h3><pre>step/step/...</pre>
<p>每个步均根据当前节点集之中的节点来进行计算。</p>
<h3>步（step）包括：</h3>
<dl>
<dt>轴（axis）</dt>
<dd>定义所选节点与当前节点之间的树关系</dd>
<dt>节点测试（node-test）</dt>
<dd>识别某个轴内部的节点</dd>
<dt>零个或者更多谓语（predicate）</dt>
<dd>更深入地提炼所选的节点集</dd></dl>
<h3>步的语法：</h3><pre>轴名称::节点测试[谓语]</pre>
<h3>实例</h3>
<table>
<tbody>
<tr>
<th>例子</th>
<th>结果</th></tr>
<tr>
<td>child::book</td>
<td>选取所有属于当前节点的子元素的 book 节点</td></tr>
<tr>
<td>attribute::lang</td>
<td>选取当前节点的 lang 属性</td></tr>
<tr>
<td>child::*</td>
<td>选取当前节点的所有子元素</td></tr>
<tr>
<td>attribute::*</td>
<td>选取当前节点的所有属性</td></tr>
<tr>
<td>child::text()</td>
<td>选取当前节点的所有文本子节点</td></tr>
<tr>
<td>child::node()</td>
<td>选取当前节点的所有子节点</td></tr>
<tr>
<td>descendant::book</td>
<td>选取当前节点的所有 book 后代</td></tr>
<tr>
<td>ancestor::book</td>
<td>选择当前节点的所有 book 先辈</td></tr>
<tr>
<td>ancestor-or-self::book</td>
<td>选取当前节点的所有book先辈以及当前节点（假如此节点是book节点的话）</td></tr>
<tr>
<td>child::*/child::price</td>
<td>选取当前节点的所有 price 孙。</td></tr></tbody></table></div><br />
<div>
<h2>XPath 运算符</h2>
<p>下面列出了可用在 XPath 表达式中的运算符：</p>
<table>
<tbody>
<tr>
<th>运算符</th>
<th>描述</th>
<th>实例</th>
<th>返回值</th></tr>
<tr>
<td>|</td>
<td>计算两个节点集</td>
<td>//book | //cd</td>
<td>返回所有带有 book 和 ck 元素的节点集</td></tr>
<tr>
<td>+</td>
<td>加法</td>
<td>6 + 4</td>
<td>10</td></tr>
<tr>
<td>-</td>
<td>减法</td>
<td>6 - 4</td>
<td>2</td></tr>
<tr>
<td>*</td>
<td>乘法</td>
<td>6 * 4</td>
<td>24</td></tr>
<tr>
<td>div</td>
<td>除法</td>
<td>8 div 4</td>
<td>2</td></tr>
<tr>
<td>=</td>
<td>等于</td>
<td>price=9.80</td>
<td>
<p>如果 price 是 9.80，则返回 true。</p>
<p>如果 price 是 9.90，则返回 fasle。</p></td></tr>
<tr>
<td>!=</td>
<td>不等于</td>
<td>price!=9.80</td>
<td>
<p>如果 price 是 9.90，则返回 true。</p>
<p>如果 price 是 9.80，则返回 fasle。</p></td></tr>
<tr>
<td>&lt;</td>
<td>小于</td>
<td>price&lt;9.80</td>
<td>
<p>如果 price 是 9.00，则返回 true。</p>
<p>如果 price 是 9.90，则返回 fasle。</p></td></tr>
<tr>
<td>&lt;=</td>
<td>小于或等于</td>
<td>price&lt;=9.80</td>
<td>
<p>如果 price 是 9.00，则返回 true。</p>
<p>如果 price 是 9.90，则返回 fasle。</p></td></tr>
<tr>
<td>&gt;</td>
<td>大于</td>
<td>price&gt;9.80</td>
<td>
<p>如果 price 是 9.90，则返回 true。</p>
<p>如果 price 是 9.80，则返回 fasle。</p></td></tr>
<tr>
<td>&gt;=</td>
<td>大于或等于</td>
<td>price&gt;=9.80</td>
<td>
<p>如果 price 是 9.90，则返回 true。</p>
<p>如果 price 是 9.70，则返回 fasle。</p></td></tr>
<tr>
<td>or</td>
<td>或</td>
<td>price=9.80 or price=9.70</td>
<td>
<p>如果 price 是 9.80，则返回 true。</p>
<p>如果 price 是 9.50，则返回 fasle。</p></td></tr>
<tr>
<td>and</td>
<td>与</td>
<td>price&gt;9.00 and price&lt;9.90</td>
<td>
<p>如果 price 是 9.80，则返回 true。</p>
<p>如果 price 是 8.50，则返回 fasle。</p></td></tr>
<tr>
<td>mod</td>
<td>计算除法的余数</td>
<td>5 mod 2</td>
<td>1</td></tr></tbody></table></div></div>转自：<a href="http://txy920.blog.163.com/blog/static/1494427820095922212262/">http://txy920.blog.163.com/blog/static/1494427820095922212262/</a><img src ="http://www.blogjava.net/freeman1984/aggbug/363271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2011-11-09 10:45 <a href="http://www.blogjava.net/freeman1984/archive/2011/11/09/363271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>object&lt;-&gt;XML之simple</title><link>http://www.blogjava.net/freeman1984/archive/2010/01/29/311206.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Fri, 29 Jan 2010 05:07:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/01/29/311206.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/311206.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/01/29/311206.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/311206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/311206.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Simple 是一个 Java 框架，用于简化序列化和反序列化 XML 的过程。使用 Simple，开发人员可以简化（名字由此而来）将简单老 Java 对象（POJO）转换成 XML 文档的过程 — 即所谓的<em>序列化（serialization）</em>过程。Simple 也可促进相反的过程：开发人员可以将 XML 文档转换成 POJO — 即所谓的<em>反序列化（deserialization）</em>过程。</p>
<p>&nbsp;&nbsp;&nbsp; Simple 名副其实，它使用注解来支持序列化和反序列化过程。根据相应的 XML 文档应该如何出现，对 POJO 进行注解。一些字段被注解为属性，另一些字段被注解为元素。类通常被注解为根元素。在序列化过程中，该框架处理冗长的解释注解和产生相应 XML 文档的过程。无足为奇，在 XML 文档被转换成 POJO 的反序列化过程中，注解也会被解释。</p>
<p>使用 Simple 有几个优势。首先，它促进快速应用程序开发。Simple 是如此简单，它支持开发人员快速实现健壮的、使用 XML 序列化和反序列化的应用程序，无需完成长长的学习曲线以及付出繁重的开发劳动。</p>
<p>其次，Simple 不需要配置。前面已经提到，Simple 使用注解。这些注解取代了基于 XML 的配置文件（其他框架一般都有这样的配置文件）。</p>
<p>最后，Simple 只让使用它的应用程序增加少量的内存占用。JAR文件只有 239 KB。Simple 也不依赖于一系列其他 JAR 文件，而其他框架则通常不是这样的。<br />
jar下载地址：<font style="background-color: #cce8cf"><a href="http://simple.sourceforge.net/track/get.php?version=2.2&amp;package=simple-xml-2.2.zip">http://simple.sourceforge.net/track/get.php?version=2.2&amp;package=simple-xml-2.2.zip</a></font></p>
<p>&nbsp;简单实例：bean--》xml<br />
<font style="background-color: #cce8cf">&nbsp;bean：<br />
<br />
</p>
<pre>@Root
public class Example {
@Element
private String text;
@Attribute
private int index;
public Example() {
super();
}
public Example(String text, int index) {
this.text = text;
this.index = index;
}
public String getMessage() {
return text;
}
public int getId() {
return index;
}
}
</pre>
测试代码：<br />
<br />
<pre>Serializer serializer = new Persister();
Example example = new Example("Example message", 123);
File result = new File("example.xml");
serializer.write(example, result);
</pre>
生成xml文件：<br />
<br />
<pre>&lt;example index="123"&gt;
&lt;text&gt;Example message&lt;/text&gt;
&lt;/example&gt;
</pre>
<br />
<br />
xml--&gt;bean:<br />
测试代码：<br />
Serializer serializer = new Persister();<br />
File source = new File("example.xml");<br />
<br />
Example example = serializer.read(Example.class, source);<br />
<br />
<br />
</font>
<img src ="http://www.blogjava.net/freeman1984/aggbug/311206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-01-29 13:07 <a href="http://www.blogjava.net/freeman1984/archive/2010/01/29/311206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dtd xsd</title><link>http://www.blogjava.net/freeman1984/archive/2010/01/21/310442.html</link><dc:creator>疯狂</dc:creator><author>疯狂</author><pubDate>Thu, 21 Jan 2010 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/freeman1984/archive/2010/01/21/310442.html</guid><wfw:comment>http://www.blogjava.net/freeman1984/comments/310442.html</wfw:comment><comments>http://www.blogjava.net/freeman1984/archive/2010/01/21/310442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/freeman1984/comments/commentRss/310442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/freeman1984/services/trackbacks/310442.html</trackback:ping><description><![CDATA[dtd:<br />
<div>
<h2>声明一个元素</h2>
<p>在 DTD 中，XML 元素通过元素声明来进行声明。元素声明使用下面的语法：</p>
<pre>&lt;!ELEMENT 元素名称 类别&gt;</pre>
<p>或者</p>
<pre>&lt;!ELEMENT 元素名称 (元素内容)&gt;</pre>
</div>
<div>
<h2>空元素</h2>
<p>空元素通过类别关键词EMPTY进行声明：</p>
<pre>&lt;!ELEMENT 元素名称 EMPTY&gt;</pre>
<h3>例子：</h3>
<pre>&lt;!ELEMENT br EMPTY&gt;</pre>
<h3>XML例子：</h3>
<pre>&lt;br /&gt;</pre>
</div>
<div>
<h2>只有 PCDATA 的元素</h2>
<p>只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明：</p>
<pre>&lt;!ELEMENT 元素名称 (#PCDATA)&gt;</pre>
<h3>例子：</h3>
<pre>&lt;!ELEMENT from (#PCDATA)&gt;</pre>
</div>
<div>
<h2>带有任何内容的元素</h2>
<p>通过类别关键词 ANY 声明的元素，可包含任何可解析数据的组合：</p>
<pre>&lt;!ELEMENT 元素名称 ANY&gt;</pre>
<h3>例子：</h3>
<pre>&lt;!ELEMENT note ANY&gt;</pre>
</div>
<div>
<h2>带有子元素（序列）的元素</h2>
<p>带有一个或多个子元素的元素通过圆括号中的子元素名进行声明：</p>
<pre>&lt;!ELEMENT 元素名称 (子元素名称 1)&gt;</pre>
<p>或者</p>
<pre>&lt;!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)&gt;</pre>
<h3>例子：</h3>
<pre>&lt;!ELEMENT note (to,from,heading,body)&gt;</pre>
<p>当子元素按照由逗号分隔开的序列进行声明时，这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中，子元素也必须被声明，同时子元素也可拥有子元素。"note" 元素的完整声明是：</p>
<pre>&lt;!ELEMENT note (to,from,heading,body)&gt;
&lt;!ELEMENT to      (#PCDATA)&gt;
&lt;!ELEMENT from    (#PCDATA)&gt;
&lt;!ELEMENT heading (#PCDATA)&gt;
&lt;!ELEMENT body    (#PCDATA)&gt;</pre>
</div>
<div>
<h2>声明只出现一次的元素</h2>
<pre>&lt;!ELEMENT 元素名称 (子元素名称)&gt;</pre>
<h3>例子：</h3>
<pre>&lt;!ELEMENT note (message)&gt;</pre>
<p>上面的例子声明了：message 子元素必须出现一次，并且必须只在 "note" 元素中出现一次。</p>
</div>
<div>
<h2>声明最少出现一次的元素</h2>
<pre>&lt;!ELEMENT 元素名称 (子元素名称+)&gt;</pre>
<h3>例子：</h3>
<pre>&lt;!ELEMENT note (message+)&gt;</pre>
<p>上面的例子中的加号声明了：message 子元素必须在 "note" 元素内出现至少一次。</p>
</div>
<div>
<h2>声明出现零次或多次的元素</h2>
<pre>&lt;!ELEMENT 元素名称 (子元素名称*)&gt;</pre>
<h3>例子：</h3>
<pre>&lt;!ELEMENT note (message*)&gt;</pre>
<p>上面的例子中的星号声明了：子元素 message 可在 "note" 元素内出现零次或多次。</p>
</div>
<div>
<h2>声明出现零次或一次的元素</h2>
<pre>&lt;!ELEMENT 元素名称 (子元素名称?)&gt;</pre>
<h3>例子：</h3>
<pre>&lt;!ELEMENT note (message?)&gt;</pre>
<p>上面的例子中的问号声明了：子元素 message 可在 "note" 元素内出现零次或一次。</p>
</div>
<div>
<h2>声明&#8220;非.../既...&#8221;类型的内容</h2>
<h3>例子：</h3>
<pre>&lt;!ELEMENT note (to,from,header,(message|body))&gt;</pre>
<p>上面的例子声明了："note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素，以及非 "message" 元素既 "body" 元素。</p>
</div>
<div>
<h2>声明混合型的内容</h2>
<h3>例子：</h3>
<pre>&lt;!ELEMENT note (#PCDATA|to|from|header|message)*&gt;</pre>
<p>上面的例子声明了："note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。<br />
<br />
</p>
<div id="intro">
<p><strong>在 DTD 中，属性通过 ATTLIST 声明来进行声明。</strong></p>
</div>
<div>
<h2>声明属性</h2>
<p>属性声明拥使用下列语法：</p>
<pre>&lt;!ATTLIST 元素名称 属性名称 属性类型 默认值&gt;</pre>
<h3>DTD 实例:</h3>
<pre>&lt;!ATTLIST payment type CDATA "check"&gt;</pre>
<h3>XML 实例:</h3>
<pre>&lt;payment type="check" /&gt;</pre>
<h3>以下是<em>属性类型</em>的选项：</h3>
<table class="dataintable">
    <tbody>
        <tr>
            <th>类型</th>
            <th>描述</th>
        </tr>
        <tr>
            <td>CDATA</td>
            <td>值为字符数据 (character data)</td>
        </tr>
        <tr>
            <td>(en1|en2|..)</td>
            <td>此值是枚举列表中的一个值</td>
        </tr>
        <tr>
            <td>ID</td>
            <td>值为唯一的 id</td>
        </tr>
        <tr>
            <td>IDREF</td>
            <td>值为另外一个元素的 id</td>
        </tr>
        <tr>
            <td>IDREFS</td>
            <td>值为其他 id 的列表</td>
        </tr>
        <tr>
            <td>NMTOKEN</td>
            <td>值为合法的 XML 名称</td>
        </tr>
        <tr>
            <td>NMTOKENS</td>
            <td>值为合法的 XML 名称的列表</td>
        </tr>
        <tr>
            <td>ENTITY</td>
            <td>值是一个实体</td>
        </tr>
        <tr>
            <td>ENTITIES</td>
            <td>值是一个实体列表</td>
        </tr>
        <tr>
            <td>NOTATION</td>
            <td>此值是符号的名称</td>
        </tr>
        <tr>
            <td>xml:</td>
            <td>值是一个预定义的 XML 值</td>
        </tr>
    </tbody>
</table>
<h3>默认值参数可使用下列值：</h3>
<table class="dataintable">
    <tbody>
        <tr>
            <th>值</th>
            <th>解释</th>
        </tr>
        <tr>
            <td>值</td>
            <td>属性的默认值</td>
        </tr>
        <tr>
            <td>#REQUIRED</td>
            <td>属性值是必需的</td>
        </tr>
        <tr>
            <td>#IMPLIED</td>
            <td>属性不是必需的</td>
        </tr>
        <tr>
            <td>#FIXED value</td>
            <td>属性值是固定的</td>
        </tr>
    </tbody>
</table>
</div>
<div>
<h2>规定一个默认的属性值</h2>
<h3>DTD:</h3>
<pre>&lt;!ELEMENT square EMPTY&gt;
&lt;!ATTLIST square width CDATA "0"&gt;</pre>
<h3>合法的 XML:</h3>
<pre>&lt;square width="100" /&gt;</pre>
<p>在上面的例子中，"square" 被定义为带有 CDATA 类型的 "width" 属性的空元素。如果宽度没有被设定，其默认值为0 。</p>
</div>
<div>
<h2>#IMPLIED</h2>
<h3>语法</h3>
<pre>&lt;!ATTLIST 元素名称 属性名称 属性类型 #IMPLIED&gt;</pre>
<h3>例子</h3>
<p>DTD:</p>
<pre>&lt;!ATTLIST contact fax CDATA #IMPLIED&gt;</pre>
<p>合法的 XML:</p>
<pre>&lt;contact fax="555-667788" /&gt;</pre>
<p>合法的 XML:</p>
<pre>&lt;contact /&gt;</pre>
<p>假如您不希望强制作者包含属性，并且您没有默认值选项的话，请使用关键词 #IMPLIED。</p>
</div>
<div>
<h2>#REQUIRED</h2>
<h3>语法</h3>
<pre>&lt;!ATTLIST 元素名称 属性名称 属性类型 #REQUIRED&gt;</pre>
<h3>例子</h3>
<p>DTD:</p>
<pre>&lt;!ATTLIST person number CDATA #REQUIRED&gt;</pre>
<p>合法的 XML:</p>
<pre>&lt;person number="5677" /&gt;</pre>
<p>非法的 XML:</p>
<pre>&lt;person /&gt;</pre>
<p>假如您没有默认值选项，但是仍然希望强制作者提交属性的话，请使用关键词 #REQUIRED。</p>
</div>
<div>
<h2>#FIXED</h2>
<h3>语法</h3>
<pre>&lt;!ATTLIST 元素名称 属性名称 属性类型 #FIXED "value"&gt;</pre>
<h3>例子</h3>
<p>DTD:</p>
<pre>&lt;!ATTLIST sender company CDATA #FIXED "Microsoft"&gt;</pre>
<p>合法的 XML:</p>
<pre>&lt;sender company="Microsoft" /&gt;</pre>
<p>非法的 XML:</p>
<pre>&lt;sender company="W3School" /&gt;</pre>
<p>如果您希望属性拥有固定的值，并不允许作者改变这个值，请使用 #FIXED 关键词。如果作者使用了不同的值，XML 解析器会返回错误。</p>
</div>
<div>
<h2>列举属性值</h2>
<h3>语法：</h3>
<pre>&lt;!ATTLIST 元素名称 属性名称 (en1|en2|..) 默认值&gt;</pre>
<h3>DTD 例子:</h3>
<pre>&lt;!ATTLIST payment type (check|cash) "cash"&gt;</pre>
<h3>XML 例子:</h3>
<pre>&lt;payment type="check" /&gt;</pre>
<p>或者</p>
<pre>&lt;payment type="cash" /&gt;</pre>
<p>如果您希望属性值为一系列固定的合法值之一，请使用列举属性值。</p>
</div>
</div>
<div id="intro">
<p><strong>实体是用于定义用于定义引用普通文本或特殊字符的快捷方式的变量。</strong></p>
<p><strong>实体引用是对实体的引用。</strong></p>
<p><strong>实体可在内部或外部进行声明。</strong></p>
</div>
<div>
<h2>一个内部实体声明</h2>
<h3>语法：</h3>
<pre>&lt;!ENTITY 实体名称 "实体的值"&gt;</pre>
<h3>例子：</h3>
<p>DTD 例子:</p>
<pre>&lt;!ENTITY writer "Bill Gates"&gt;
&lt;!ENTITY copyright "Copyright W3School.com.cn"&gt;</pre>
<p>XML 例子:</p>
<pre>&lt;author&gt;&amp;writer;&amp;copyright;&lt;/author&gt;</pre>
<p class="note"><span>注释:</span> 一个实体由三部分构成: 一个和号 (&amp;), 一个实体名称, 以及一个分号 (;)。</p>
</div>
<div>
<h2>一个外部实体声明</h2>
<h3>语法：</h3>
<pre>&lt;!ENTITY 实体名称 SYSTEM "URI/URL"&gt;</pre>
<h3>例子：</h3>
<p>DTD 例子:</p>
<pre>&lt;!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"&gt;
&lt;!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"&gt;</pre>
<p>XML 例子:</p>
<pre>&lt;author&gt;&amp;writer;&amp;copyright;&lt;/author&gt;</pre>
</div>
 <img src ="http://www.blogjava.net/freeman1984/aggbug/310442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/freeman1984/" target="_blank">疯狂</a> 2010-01-21 22:44 <a href="http://www.blogjava.net/freeman1984/archive/2010/01/21/310442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>