Java中的XML之与HTML的区别验证,定位信息,命名空间

HTML与XML的区别

  • HTML对大小写不敏感,XML大小写敏感
  • HTML结束标签可以省略,如</p>,XML不能
  • XML只有单个标签而没有结束标签的元素必须以/结束
  • XML属性值必须用引号括起来
  • HTML属性可以没有值,XML所有属性必须有值

验证XML文档

需要指定文档结构时,可以提供一个文档类型定义(DTD)或XML Schema

文档类型定义

  • 将这些规则纳入XML文档
<?xml version="1.0"?>
<!DOCTYPE configuration[

    <!ELEMENT configuration...>
    ...
]>
<configuration>
...
</configuration>

这些规则被纳入到DOCTYPE声明中,代码块[...]用来限定其界限,比如configuration

  • SYSTEM声明,将DTD存储在外面
<!DOCTYPE configuration SYSTEM "config.dtd">
<!DOCTYPE configuration SYSTEM "http://myserver.com/config.dtd">
  • 标记PUBLIC标识符
class MyEntityResolver implements EntityResolver{
    public InputSource resolveEntity(String publicId, String systemID){
        if(publicID.equals(a knowx ID)){
            return new InputSource(DTD data):
        }else{
            return null;
        }
    }
}

PS:具体的类型规则看文档,注意在设计DTD时应该要么只包含文本,要么包含其他元素,避免解析混合式(标签和文本的混合)内容时空

XML Schema

  • 声明Schema文件
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</project>
  • 使用xsd:表示XSL Schema定义的命名空间
<xsd:element name="name" type="xsd:string"/>
- ref属性引用Schema中位于别处的定义
<xsd:element ref="name"/>
<xsd:element name="style" type=StyleType"/>
    <xsd:restriction base="xsd:string"/>
        <xsd:enumeration value="PLAIN"/>
    </xsd:restriction>
</xsd:element>

使用XPath定位信息

  • 查找下列的username的值,,通过XPath表达式/configuration/database/username
<configfuration>
    <database>
        <username id="test">pinnuli</username>
        <password>123456</password>
    </database>
</configfuration>
  • 用XPathFactory创建一个XPath对象,调用evaluate方法计算XPath表达式
XPathFactory xpFactory = XPathFactory.newInstance();
path = xpfactory.newXPath();
String username = path.evaluate(/configuration/database/username",doc);

具体的语法看文档


XML的命名空间

  • 使用xmlns给定命名空间
<element xmlns="namespaceURI1">
    <child xmlns="namespaceURI2">
        grandchildren
    </child>
</element>
>这里第一个子元素和孙元素都是第二个命名空间的一部分
  • 使用xmlns:prefix="namespaceURI"定义命名空间和前缀
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="pinnuli" type="haha"/>
    ...
</xsd:schema>
>在这里xsd:schema实际上指的是命名空间`http://www.w3.org/2001/XMLSchema`中的`schema`
  • 可以控制解析器对命名空间的处理,默认情况下DOM解析器并非“命名空间感知的”,可以调用DocumentBuilderFactory类的setNamespaceAware()打开命名空间处理特性
factory.serNamespaceAware(true);

参阅:
慕课网:Java眼中的XML---文件读取

java核心技术 卷II:高级特性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342