实体可以简单的理解为引用数据项的方法,可以是普通的文本也可以是二进制数据。

实体可以分为通用实体和参数实体。通用实体用于XML当中,用于引用文本或者二进制数据,而参数实体只能在DTD中使用。通用实体与参数实体可以是内部实 体或者是外部实体。实体还可以分为未解析与解析的实体,不同在于解析实体是规范的XML文本,而未解析的实体是不应该被解析器解析的二进制数据。

3种实体可以组合出8种实体,但实际上XML只用到5种形态:
1、通用内部解析实体
2、通用外部解析实体
3、通用外部未解析实体
4、参数内部解析实体
5、参数外部解析实体

通用内部解析实体

语法:

<!ENTITY 名称 “内容”>

实例:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root[
<!ELEMENT root (shop)+>
<!ELEMENT shop (name, address, size, pic*, remark?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT size (#PCDATA)>
<!ELEMENT pic (#PCDATA)>
<!ELEMENT remark (#PCDATA)>
<!ENTITY big "旗舰店">
<!ENTITY medium "中等">
<!ENTITY small "小型">
]>
<root>
<shop>
<name>物美</name>
<address>文一路</address>
<size>&big;</size>
</shop>
</root>

注意:在实体中可以嵌套,但是不能两个是个实体互相嵌套(死循环了)。

下面正确的引用:

<!ENTITY one “one”>

<!ENTITY two “&one; I am two”>

下面是不正确的引用:

<!ENTITY one “Hello &two;”>

<!ENTITY two “Hello &one”>

参数内部解析实体

参数内部实体相当于DTD代码段的声明。

实例:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root[
<!ENTITY % shopattr "
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT size (#PCDATA)>
<!ELEMENT pic (#PCDATA)>
<!ELEMENT remark (#PCDATA)>"> <!ELEMENT root (shop)+>
<!ELEMENT shop (name, address, size, pic*, remark?)>
%shopattr; <!--使用参数实体替代--> <!ENTITY big "旗舰店">
<!ENTITY medium "中等">
<!ENTITY small "小型">
]>
<root>
<shop>
<name>物美</name>
<address>文一路</address>
<size>&big;</size>
</shop>
</root>

通用外部解析实体

DTD中引用otherSize.xml文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root[
<!ELEMENT root (shop)+>
<!ELEMENT shop (name, address, size, pic*, remark?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT size (#PCDATA)>
<!ELEMENT pic (#PCDATA)>
<!ELEMENT remark (#PCDATA)>
<!ENTITY big "旗舰店">
<!ENTITY medium "中等">
<!ENTITY small "小型">
<!ENTITY otherSize SYSTEM "otherSize.xml">
]>
<root>
<shop>
<name>物美</name>
<address>文一路</address>
<size>&big;</size>
</shop>
<shop>
<name>联华</name>
<address>文二路</address>
<size>&otherSize;</size>
</shop>
</root>

otherSize.xml

<?xml version="1.0" encoding="utf-8"?>
<option>
big too
</option>
在ie8中显示的效果:

通用外部未解析实体

通用外部未解析实体与其他的类型很相似,区别是XML处理器不会去尝试分析实体的的信息。

通用外部未解析实体的格式:

<!ENTITY 实体名 SYSTEM 二进制数据位置 NDATA 标记名称>

NOTATION指令可以将未解析的二进制实体定义为标记

<!NOTATION 标记名 SYSTEM 标记描述文字>

标记描述文字可以是:

处理现实二进制数据的应用程序

描述格式的网络文件

普通的一段描述性语言

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root[
<!ELEMENT root (shop)+>
<!ELEMENT shop (name, address, size, pic*, remark?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT size (#PCDATA)>
<!ELEMENT pic EMPTY>
<!ATTLIST pic source ENTITY #REQUIRED>
<!NOTATION JPEG SYSTEM "acdsee.exe">
<!ENTITY pic1 SYSTEM "pic1.jpg" NDATA JPEG>
<!ELEMENT remark (#PCDATA)>
<!ENTITY big "旗舰店">
<!ENTITY medium "中等">
<!ENTITY small "小型">
]>
<root>
<shop>
<name>物美</name>
<address>文一路</address>
<size>&big;</size>
<pic source="pic1"/>
</shop>
</root>

参数外部解析实体

使用参数外部解析实体可以方便的组织分布在各个文件中的DTD文件。作用相当的大。

示例:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ROOT [
<!ELEMENT ROOT (A|B)*>
<!ENTITY % A_atrr SYSTEM "A.dtd">
<!ENTITY % B_atrr SYSTEM "B.dtd">
%A_atrr;
%B_atrr;
]>
<ROOT>
<A>
<NAME_A>
I am A!
</NAME_A>
</A>
<B>
<NAME_B>
I am B;
</NAME_B>
</B>
</ROOT>

A.dtd

<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT A (NAME_A)>
<!ELEMENT NAME_A (#PCDATA)>

B.dtd

<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT B (NAME_B)>
<!ELEMENT NAME_B (#PCDATA)>
--------------------------------------------------------------------------
来源于:http://www.cnblogs.com/ygcao/archive/2010/05/02/1726129.html

XML 实体的更多相关文章

  1. XML实体注入漏洞

    XML实体注入漏洞 测试代码1: 新建xmlget.php,复制下面代码 <?php $xml=$_GET['xml']; $data = simplexml_load_string($xml) ...

  2. XML 实体扩展攻击

    XMl Entity Expansion(攻击)某种程度上类似于 XML Entity Expansion,但是它主要试图通过消耗目标程序的服务器环境来进行DOS攻击的.这种攻击基于XML Entit ...

  3. hibernate 非xml实体类配置方法!

    hibernate 非xml实体类配置方法! 这个是hibernate.cfg.xml配置文件 <?xml version='1.0' encoding='UTF-8'?> <!DO ...

  4. XML实体解析器的作用

    XML实体解析器的作用 什么是实体解析器 如果一个sax解析器需要实现对外部实体的自定义处理,那么必须实现一个EntityResolver接口并且注册到SAX驱动上. 从这段文字可以看出来,实体解析器 ...

  5. 小试XML实体注入攻击

    基础知识 XML(Extensible Markup Language)被设计用来传输和存储数据.关于它的语法,本文不准备写太多,只简单介绍一下. XML基本知识 1 2 3 4 5 <?xml ...

  6. XML 实体扩展攻击libxml_disable_entity_loader

    XML 实体扩展攻击libxml_disable_entity_loader https://pay.weixin.qq.com/index.php/public/cms/content_detail ...

  7. 3. XML实体注入漏洞的利用与学习

    XML实体注入漏洞的利用与学习 前言 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发 ...

  8. 2.XML实体注入漏洞攻与防

    XML实体注入基础 当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件.执行系统命令.探测内网端口.攻击内网网站等危害. 简单了解XML以后,我们知道要在XML中使用特殊字符,需要使用实体字符 ...

  9. Fortify漏洞之XML External Entity Injection(XML实体注入)

    继续对Fortify的漏洞进行总结,本篇主要针对  XML External Entity Injection(XML实体注入) 的漏洞进行总结,如下: 1.1.产生原因: XML External ...

  10. 企业安全01-Apache solr XML实体注入漏洞CVE-2017-12629

    Apache solr XML 实体注入漏洞CVE-2017-12629 一.简介 Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apac ...

随机推荐

  1. uniGUI试用笔记(九)uniGUI执行程序部署有3种形式1

    uniGUI执行程序部署有3种形式 1.ISAPI模式 部署在IIS或Apache,程序编译为Dll形式,没有试,准备后续专门测试一下. 2.标准执行文件模式 将软件编译成一个独立的Exe文件,包括了 ...

  2. Facebook支撑万亿Post搜索背后的技术窥探

    转自http://www.csdn.net/article/2013-10-29/2817333-under-the-hood-building-posts-search 近日,Facebook为po ...

  3. LeetCode145:Binary Tree Postorder Traversal

    题目: Given a binary tree, return the postorder traversal of its nodes' values. For example: Given bin ...

  4. sql 中如何查询某一列的数据在另一个表中有没有?

    假设表table1,列a,表table2,列bselect a from table1where a not in(select b from table2)

  5. ASP .Net Core路由(Route) - 纸壳CMS的关键

    关于纸壳CMS 纸壳CMS是一个开源免费的,可视化设计,在线编辑的内容管理系统.基于ASP .Net Core开发,插件式设计: GitHub:https://github.com/SeriaWei/ ...

  6. The rapid development platform upgrade, leave the time to yourself, the work is lost to the soft platform

    Bring me back to your home. Please leave your work behind! Soft agile development framework V7.0 new ...

  7. 如何使用socket进行java网络编程(三)

    本篇文章继续记录java网络通讯编程的学习.在本系列笔记的第一篇中曾经记录过一个项目中的程序,当时还处于项目早期,还未进入与第三方公司的联调阶段,笔者只是用java写了一个client程序模拟了一下第 ...

  8. Kotlin 基本语法

    常量 val a: Int = 5 变量 var a: Int = 5 Any:匹配任何类型 ?:nullable,比如 a?.toString,如果 a 为 null 不会出错. 函数基本结构 fu ...

  9. django系列9--django中的组件(form表单)

    modelform整体 from django import forms from app01 import models import hashlib from django.core.except ...

  10. include与file_get_contents区别

    参考:http://www.cnblogs.com/bgwan/archive/2013/03/13/2957215.html 一,先来说file_get_contents         这个函数就 ...