XML之DOM解析模型

前端之家收集整理的这篇文章主要介绍了XML之DOM解析模型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<?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@

返回此节点限定名称的本地部分。@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@

此节点的名称,取决于其类型;参见上表。@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@

属性返回此节点及其后代的文本内容。@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@

属性返回此节点及其后代的文本内容。@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。@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@

指定解析时此文档使用的编码的属性。@H_301_4@

boolean getStrictErrorChecking()@H_301_4@

指定是否强制执行错误检查的属性。@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@

指定是否强制执行错误检查的属性。@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@

返回此属性名称。@H_301_4@

Element getOwnerElement()@H_301_4@

属性连接到的 Element 节点;如果未使用此属性,则为 null。@H_301_4@

TypeInfo getSchemaTypeInfo()@H_301_4@

与此属性相关联的类型信息。@H_301_4@

boolean getSpecified()@H_301_4@

如果在实例文档中显式给此属性一个值,则为True;否则为 false。@H_301_4@

String getValue()@H_301_4@

检索时,该属性值以字符串形式返回。@H_301_4@

boolean isId()@H_301_4@

返回是否此属性属于类型 ID(即包含其所有者元素的标识符)。@H_301_4@

void setValue(Stringvalue) @H_301_4@

检索时,该属性值以字符串形式返回。@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@

通过名称获得属性值。@H_301_4@

Attr getAttributeNode(Stringname) @H_301_4@

通过名称获得属性节点。@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@

元素的名称。@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@

通过名称移除一个属性。@H_301_4@

Attr removeAttributeNode(AttroldAttr) @H_301_4@

移除指定的属性节点。@H_301_4@

void removeAttributeNS(StringnamespaceURI,String localName) @H_301_4@

通过本地名称名称空间 URI 移除属性值。@H_301_4@

void setAttribute(Stringname,String value) @H_301_4@

添加一个新属性。@H_301_4@

Attr setAttributeNode(AttrnewAttr) @H_301_4@

添加新的属性节点。@H_301_4@

Attr setAttributeNodeNS(AttrnewAttr) @H_301_4@

添加属性。@H_301_4@

void setAttributeNS(StringnamespaceURI,String qualifiedName,String value)@H_301_4@

添加属性。@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@

检索通过名称指定的节点。@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@

移除通过名称指定的节点。@H_301_4@

Node removeNamedItemNS(StringnamespaceURI,String localName) @H_301_4@

移除通过本地名称名称空间 URI 指定的节点。@H_301_4@

Node setNamedItem(Nodearg) @H_301_4@

使用 nodeName 属性添加节点。@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@

猜你在找的XML相关文章