<?xml version= "1.0" encoding = "UTF-8"> <articles> <article category="xml"> <title>XML概述</title> <author>Jerry</author> <email>jerry@yahoo.com</email> <date>2014-10-20</date> </article> </articles>DOM解析(DocumentObject Mode)是一种基于对象的API,它把XML的内容加载到内存中,生成一个与XML文档内容对应的对象模型。当解析完成后,内存中会生成一个对应的DOM树@H_301_4@
XML解析只负责解析正确的XML,而不负责判断XML是否合法,如果不合法,会直接抛出解析异常@H_301_4@
import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DomParser{ public static void main(String [] args){ File xmlFile = new ("E:\\article.xml"); DocumentBuilder builder = null; DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); try{ builder = builderFactory.newDocumentBuilder(); Document document = builder.parse(xmlFile); Element root = document.getDocumentElement(); System.out.println("根元素:"+root.getNodeName()); NodeList childNodes = root.getChildNodes(); for(int i =0;i<childNodes.getLength();i++){ Node node =childNodes.item(i); if(“article”.equals(node.getNodeName())){ System.out.println("文章所属分类:"+node.getAttributes().getNamedItem("category").getNodeValue()); NodeListnodeDetail = node.getChildNodes(); for(intj=0;j< nodeDetail.getLength();j++){ Nodedetail = nodeDetail.item(j); if("title".equals(detail.getNodeName())) System.out.println("标题:"+detail.getTextContenet()); elseif("author".equals(detail.getNodeName())) System.out.println("作者:"+detail.getTextContenet()); elseif("email".equals(detail.getNodeName())) System.out.println("电子邮件:"+detail.getTextContenet()); elseif("date".equals(detail.getNodeName())) System.out.println("日期:"+detail.getTextContenet()); } } } }catch(Exception e){ e.printStackTrace(); } } }
Node对象
Node appendChild(Node newChild) @H_301_4@
将节点 newChild 添加到此节点的子节点列表的末尾。@H_301_4@
Node cloneNode(booleandeep) @H_301_4@
返回此节点的副本,即允当节点的一般复制构造方法。@H_301_4@
short compareDocumentPosition(Nodeother) @H_301_4@
就节点在文档中的位置并按照文档的顺序,比较引用节点(即在其上调用此方法的节点)与作为参数传递的节点。@H_301_4@
NamedNodeMap getAttributes()@H_301_4@
包含此节点的属性的NamedNodeMap(如果它是 Element);否则为 null。@H_301_4@
String getBaseURI()@H_301_4@
此节点的绝对基 URI;如果实现不能获得绝对URI,则为 null。@H_301_4@
NodeList getChildNodes()@H_301_4@
包含此节点的所有子节点的 NodeList。@H_301_4@
Object getFeature(Stringfeature,String version) @H_301_4@
此方法返回一个特定的对象,该对象实现指定功能或版本的特定 API,如下所述。@H_301_4@
Node getFirstChild()@H_301_4@
此节点的第一个子节点。@H_301_4@
Node getLastChild()@H_301_4@
此节点的最后一个节点。@H_301_4@
String getLocalName()@H_301_4@
String getNamespaceURI()@H_301_4@
此节点的名称空间 URI;如果它未被指定,则返回null(参见)。@H_301_4@
Node getNextSibling()@H_301_4@
直接在此节点之后的节点。@H_301_4@
String getNodeName()@H_301_4@
short getNodeType()@H_301_4@
表示基础对象的类型的节点,如上所述。@H_301_4@
String getNodeValue()@H_301_4@
此节点的值,取决于其类型;参见上表。@H_301_4@
Document getOwnerDocument()@H_301_4@
与此节点相关的 Document 对象。@H_301_4@
Node getParentNode()@H_301_4@
此节点的父节点。@H_301_4@
String getPrefix()@H_301_4@
此节点的名称空间前缀;如果它未被指定,则为null。@H_301_4@
Node getPrevIoUsSibling()@H_301_4@
直接在此节点之前的节点。@H_301_4@
String getTextContent()@H_301_4@
Object getUserData(Stringkey) @H_301_4@
检索与此节点上的某个键相关联的对象。@H_301_4@
boolean hasAttributes()@H_301_4@
返回此节点(如果它是一个元素)是否具有任何属性。@H_301_4@
boolean hasChildNodes()@H_301_4@
返回此节点是否具有任何子节点。@H_301_4@
Node insertBefore(NodenewChild,Node refChild) @H_301_4@
在现有子节点 refChild 之前插入节点newChild。@H_301_4@
boolean isDefaultNamespace(StringnamespaceURI) @H_301_4@
此方法检查指定的 namespaceURI是否是默认名称空间。@H_301_4@
boolean isEqualNode(Nodearg) @H_301_4@
测试两个节点是否相等。@H_301_4@
boolean isSameNode(Nodeother) @H_301_4@
返回此节点是否是与给定节点相同的节点。@H_301_4@
boolean isSupported(Stringfeature,String version) @H_301_4@
测试 DOM 实现是否实现特定功能,且该功能是否受此节点支持,如下所述。@H_301_4@
String lookupNamespaceURI(Stringprefix) @H_301_4@
从此节点开始,查找与给定前缀相关的名称空间URI。@H_301_4@
String lookupPrefix(StringnamespaceURI) @H_301_4@
从此节点开始,查找与给定名称空间 URI 相关的前缀。@H_301_4@
void normalize()@H_301_4@
将此 Node 之下完整的深层子树中所有Text 节点(包括属性节点)放入只有结构(如元素、注释、处理指令、CDATA 节和实体引用)分隔 Text 节点的“常规”形式,也就是说,既没有相邻的 Text 节点,也没有空 Text 节点。@H_301_4@
Node removeChild(NodeoldChild) @H_301_4@
从子节点列表中移除 oldChild 所指示的子节点,并将其返回。@H_301_4@
Node replaceChild(NodenewChild,Node oldChild) @H_301_4@
将子节点列表中的子节点 oldChild 替换为 newChild,并返回 oldChild节点。@H_301_4@
void setNodeValue(StringnodeValue) @H_301_4@
此节点的值,取决于其类型;参见上表。@H_301_4@
void setPrefix(Stringprefix) @H_301_4@
此节点的名称空间前缀;如果未指定,则为null。@H_301_4@
void setTextContent(StringtextContent) @H_301_4@
Object setUserData(Stringkey,Object data,UserDataHandler handler) @H_301_4@
将对象与此节点上的键相关联。@H_301_4@
Document对象
Node adoptNode(Node source) @H_301_4@
试图把另一文档中的节点采用到此文档。@H_301_4@
Attr createAttribute(Stringname) @H_301_4@
Attr createAttributeNS(StringnamespaceURI,String qualifiedName) @H_301_4@
创建给定的限定名称和名称空间 URI 的属性。@H_301_4@
CDATASection createCDATASection(Stringdata) @H_301_4@
创建其值为指定字符串的CDATASection 节点。@H_301_4@
Comment createComment(Stringdata) @H_301_4@
创建给定指定字符串的 Comment 节点。@H_301_4@
DocumentFragment createDocumentFragment() @H_301_4@
创建空 DocumentFragment 对象。@H_301_4@
Element createElement(StringtagName) @H_301_4@
创建指定类型的元素。@H_301_4@
Element createElementNS(StringnamespaceURI,String qualifiedName) @H_301_4@
创建给定的限定名称和名称空间 URI 的元素。@H_301_4@
EntityReference createEntityReference(String name) @H_301_4@
创建 EntityReference 对象。@H_301_4@
ProcessingInstruction createProcessingInstruction(String target,String data)@H_301_4@
创建给定指定名称和数据字符串的ProcessingInstruction 节点。@H_301_4@
Text createTextNode(Stringdata) @H_301_4@
创建给定指定字符串的 Text 节点。@H_301_4@
DocumentType getDoctype()@H_301_4@
与此文档相关的文档类型声明(参见DocumentType)。@H_301_4@
Element getDocumentElement()@H_301_4@
这是一种便捷属性,该属性允许直接访问文档的文档元素的子节点。@H_301_4@
String getDocumentURI()@H_301_4@
文档的位置,如果未定义或 Document是使用 DOMImplementation.createDocument 创建的,则为 null。@H_301_4@
DOMConfiguration getDomConfig() @H_301_4@
调用Document.normalizeDocument() 时使用的配置。@H_301_4@
Element getElementById(StringelementId) @H_301_4@
返回具有带给定值的 ID 属性的 Element。@H_301_4@
NodeList getElementsByTagName(Stringtagname) @H_301_4@
按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。@H_301_4@
NodeList getElementsByTagNameNS(StringnamespaceURI,String localName) @H_301_4@
以文档顺序返回具有给定本地名称和名称空间URI 的所有 Elements 的 NodeList。@H_301_4@
DOMImplementation getImplementation() @H_301_4@
处理此文档的DOMImplementation 对象。@H_301_4@
String getInputEncoding()@H_301_4@
boolean getStrictErrorChecking()@H_301_4@
String getXmlEncoding()@H_301_4@
作为 XML 声明的一部分,指定此文档编码的属性。@H_301_4@
boolean getXmlStandalone()@H_301_4@
作为 XML 声明的一部分,指定此文档是否为独立文档的属性。@H_301_4@
String getXmlVersion()@H_301_4@
作为 XML 声明 的一部分指定此文档版本号的属性。@H_301_4@
Node importNode(NodeimportedNode,boolean deep) @H_301_4@
从另一文档向此文档导入节点,而不改变或移除原始文档中的源节点;此方法创建源节点的一个新副本。@H_301_4@
void normalizeDocument()@H_301_4@
此方法的行为如同使文档通过一个保存和加载的过程,而将其置为 "normal(标准)" 形式。@H_301_4@
Node renameNode(Noden,String namespaceURI,String qualifiedName) @H_301_4@
重命名 ELEMENT_NODE 或ATTRIBUTE_NODE 类型的现有节点。@H_301_4@
void setDocumentURI(StringdocumentURI) @H_301_4@
文档的位置,如果未定义或 Document是使用 DOMImplementation.createDocument 创建的,则为 null。@H_301_4@
void setStrictErrorChecking(booleanstrictErrorChecking) @H_301_4@
void setXmlStandalone(booleanxmlStandalone) @H_301_4@
作为 XML 声明 的一部分指定此文档是否是单独的的属性。@H_301_4@
void setXmlVersion(StringxmlVersion) @H_301_4@
作为 XML 声明 的一部分指定此文档版本号的属性。@H_301_4@
Attr对象
String getName() @H_301_4@
Element getOwnerElement()@H_301_4@
此属性连接到的 Element 节点;如果未使用此属性,则为 null。@H_301_4@
TypeInfo getSchemaTypeInfo()@H_301_4@
boolean getSpecified()@H_301_4@
如果在实例文档中显式给此属性一个值,则为True;否则为 false。@H_301_4@
String getValue()@H_301_4@
boolean isId()@H_301_4@
返回是否此属性属于类型 ID(即包含其所有者元素的标识符)。@H_301_4@
void setValue(Stringvalue) @H_301_4@
DocumentType对象
NamedNodeMap getEntities() @H_301_4@
包含在 DTD 中声明的内部和外部常规实体的 NamedNodeMap。@H_301_4@
String getInternalSubset()@H_301_4@
以字符串表示的内部子集,如果没有内部子集,则为 null。@H_301_4@
String getName()@H_301_4@
DTD 的名称;即紧跟在 DOCTYPE 关键字后面的名称。@H_301_4@
NamedNodeMap getNotations()@H_301_4@
包含在 DTD 中声明的表示法的NamedNodeMap。@H_301_4@
String getPublicId()@H_301_4@
外部子集的公共标识符。@H_301_4@
String getSystemId()@H_301_4@
外部子集的系统标识符。@H_301_4@
Element对象
String getAttribute(String name) @H_301_4@
Attr getAttributeNode(Stringname) @H_301_4@
Attr getAttributeNodeNS(StringnamespaceURI,String localName) @H_301_4@
通过本地名称和名称空间 URI 获得 Attr 节点。@H_301_4@
String getAttributeNS(StringnamespaceURI,String localName) @H_301_4@
通过本地名称和名称空间 URI 获得属性值。@H_301_4@
NodeList getElementsByTagName(Stringname) @H_301_4@
以文档顺序返回具有给定标记名称的所有后代Elements 的 NodeList。@H_301_4@
NodeList getElementsByTagNameNS(StringnamespaceURI,String localName) @H_301_4@
以文档顺序返回具有给定本地名称和名称空间URI 的所有后代 Elements 的 NodeList。@H_301_4@
TypeInfo getSchemaTypeInfo()@H_301_4@
与此元素相关的类型信息。@H_301_4@
String getTagName()@H_301_4@
boolean hasAttribute(Stringname) @H_301_4@
当具有给定名称的属性在此元素上被指定一个值或具有默认值时,返回 true;否则返回 false。@H_301_4@
boolean hasAttributeNS(StringnamespaceURI,String localName) @H_301_4@
当具有给定本地名称和名称空间 URI 的属性在此元素上被指定一个值或具有默认值时,返回 true;否则返回 false。@H_301_4@
void removeAttribute(Stringname) @H_301_4@
Attr removeAttributeNode(AttroldAttr) @H_301_4@
void removeAttributeNS(StringnamespaceURI,String localName) @H_301_4@
通过本地名称和名称空间 URI 移除属性值。@H_301_4@
void setAttribute(Stringname,String value) @H_301_4@
Attr setAttributeNode(AttrnewAttr) @H_301_4@
Attr setAttributeNodeNS(AttrnewAttr) @H_301_4@
void setAttributeNS(StringnamespaceURI,String qualifiedName,String value)@H_301_4@
void setIdAttribute(Stringname,boolean isId) @H_301_4@
如果参数 isId 为 true,则此方法将指定的属性声明为用于确定用户的 ID 属性。@H_301_4@
void setIdAttributeNode(AttridAttr,boolean isId) @H_301_4@
如果参数 isId 为 true,则此方法将指定的属性声明为用户确定的 ID 属性。@H_301_4@
void setIdAttributeNS(StringnamespaceURI,String localName,boolean isId) @H_301_4@
如果参数 isId 为 true,则此方法将指定的属性声明为用户确定的 ID 属性。@H_301_4@
NamedNodeMap对象
int getLength() @H_301_4@
此映射中的节点数。@H_301_4@
Node getNamedItem(Stringname) @H_301_4@
Node getNamedItemNS(StringnamespaceURI,String localName) @H_301_4@
检索通过本地名称和名称空间 URI 指定的节点。@H_301_4@
Node item(intindex) @H_301_4@
返回映射中第 index 个项。@H_301_4@
Node removeNamedItem(Stringname) @H_301_4@
Node removeNamedItemNS(StringnamespaceURI,String localName) @H_301_4@
移除通过本地名称和名称空间 URI 指定的节点。@H_301_4@
Node setNamedItem(Nodearg) @H_301_4@
Node setNamedItemNS(Nodearg) @H_301_4@
使用其 namespaceURI 和 localName 添加节点。@H_301_4@
NodeList对象
int getLength() @H_301_4@
列表中的节点数。@H_301_4@
Node item(intindex) @H_301_4@
返回集合中的第 index 个项。@H_301_4@