XML的NodeName的特殊值
分类:Other
阅读 (2,563)
Add comments
12月 242012
今天写一个用Java读取XML文件的代码的时候,突然在for循环里发现NodeName=#text的情况,翻来覆去的看XML并没有发现有NodeName为#text的节点。GG了一下才发现原来XML的NodeName并不只是按“<”右边的节点名来定义的,在W3C的文档中还定义了一些特殊的NodeName。
下面先看一下W3C文档中对NodeName的定义
Interface | nodeName |
---|---|
Element |
The tag name, eg. HTML |
Attr |
The attribute name, eg. id |
Text |
#text |
CDATASection |
#cdata-section |
EntityReference |
The name of the entity reference, eg. amp |
Entity |
The entity name, eg. & |
ProcessingInstruction |
The target of the processing instruction, eg.xml-stylesheet |
Comment |
#comment |
Document |
#document |
DocumentType |
The name of the document type, eg. html |
DocumentFragment |
#document-fragment |
Notation |
The notation name |
本人今天使用的XML如下:
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="utf-8"?> <UserList> <User Name="Liu" ID="1"> <Website><![CDATA[http://svn1.bcoder.com]]></Website> <Intro>I come from hebei.</Intro> </User> <User Name="Zhang" ID="2"> <Website><![CDATA[http://www.desktoptool.net]]></Website> <Intro>I come from Shandong.</Intro> </User> </UserList> |
在两个<User..>的前面各有一个#text类型的Node,乍一看什么都没有啊?其实<UserList>和下行的<User…>之间是有一堆的空格的,于是这堆空格就被当成了#text类型。将XML改成如下样子后就没有那两个#text类型的Node了
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="utf-8"?> <UserList><User Name="Liu" ID="1"> <Website><![CDATA[http://svn1.bcoder.com]]></Website> <Intro>I come from hebei.</Intro> </User><User Name="Zhang" ID="2"> <Website><![CDATA[http://www.desktoptool.net]]></Website> <Intro>I come from Shandong.</Intro> </User> </UserList> |
现在也明白为什么有的地方会用如下的判断节点类型的代码了
1 2 3 4 5 |
for (int i=0; i<uNodeList.getLength()- 1; i++){ if (uNodeList.item(i).getNodeType() == Node.DOCUMENT_TYPE_NODE){ //... } } |
[…] Post navigation << Previous […]