XML 实体
实体可以简单的理解为引用数据项的方法,可以是普通的文本也可以是二进制数据。
实体可以分为通用实体和参数实体。通用实体用于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 实体的更多相关文章
- XML实体注入漏洞
XML实体注入漏洞 测试代码1: 新建xmlget.php,复制下面代码 <?php $xml=$_GET['xml']; $data = simplexml_load_string($xml) ...
- XML 实体扩展攻击
XMl Entity Expansion(攻击)某种程度上类似于 XML Entity Expansion,但是它主要试图通过消耗目标程序的服务器环境来进行DOS攻击的.这种攻击基于XML Entit ...
- hibernate 非xml实体类配置方法!
hibernate 非xml实体类配置方法! 这个是hibernate.cfg.xml配置文件 <?xml version='1.0' encoding='UTF-8'?> <!DO ...
- XML实体解析器的作用
XML实体解析器的作用 什么是实体解析器 如果一个sax解析器需要实现对外部实体的自定义处理,那么必须实现一个EntityResolver接口并且注册到SAX驱动上. 从这段文字可以看出来,实体解析器 ...
- 小试XML实体注入攻击
基础知识 XML(Extensible Markup Language)被设计用来传输和存储数据.关于它的语法,本文不准备写太多,只简单介绍一下. XML基本知识 1 2 3 4 5 <?xml ...
- XML 实体扩展攻击libxml_disable_entity_loader
XML 实体扩展攻击libxml_disable_entity_loader https://pay.weixin.qq.com/index.php/public/cms/content_detail ...
- 3. XML实体注入漏洞的利用与学习
XML实体注入漏洞的利用与学习 前言 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进行处理时引发 ...
- 2.XML实体注入漏洞攻与防
XML实体注入基础 当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件.执行系统命令.探测内网端口.攻击内网网站等危害. 简单了解XML以后,我们知道要在XML中使用特殊字符,需要使用实体字符 ...
- Fortify漏洞之XML External Entity Injection(XML实体注入)
继续对Fortify的漏洞进行总结,本篇主要针对 XML External Entity Injection(XML实体注入) 的漏洞进行总结,如下: 1.1.产生原因: XML External ...
- 企业安全01-Apache solr XML实体注入漏洞CVE-2017-12629
Apache solr XML 实体注入漏洞CVE-2017-12629 一.简介 Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apac ...
随机推荐
- MLLib实践Naive Bayes
引言 本文基于Spark (1.5.0) ml库提供的pipeline完整地实践一次文本分类.pipeline将串联单词分割(tokenize).单词频数统计(TF),特征向量计算(TF-IDF),朴 ...
- C#中的split的基本用法
split的使用: 1.使用char()字符分隔:根据单个的char()类型的进行分隔 代码如下: string str="e2kdk2fjod2fiksf21"; ');//因为 ...
- C# 标准事件模式
.NET框架为事件定义了一个标准模式,它的目的是保持框架和用户代码之间的一致性. 标准事件的模式核心是SystemEventArgs——预定义的没有成员的框架类(不同于静态Empty属性) Event ...
- MongoDB的下载、安装与部署方法
1.什么是MongoDB? 它是介于关系型数据库和非关系型数据库之间的一种NoSQL数据库,用C++编写,是一款集敏捷性.可伸缩性.扩展性于一身的高性能的面向文档的通用数据库. 2.为什么要用Mong ...
- css 可拖拽列表
<!DOCTYPE HTML> <html><head> <meta charset="UTF-8"> <title>d ...
- CSS2.1SPEC:视觉格式化模型之width属性详解(下)
本文承接CSS2.1SPEC:视觉格式化模型之width属性详解(上),继续分析CSS视觉格式化模型中width以及相关值的计算问题: 注:与上节不同,本节的demo中由于出现了float,absol ...
- disruptor调优方法
翻译自disruptor在github上的文档,https://github.com/LMAX-Exchange/disruptor/wiki/Getting-Started Basic Tuning ...
- Python(网络基础)
day33 参考:http://www.cnblogs.com/linhaifeng/articles/5937962.html IP协议: 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址, ...
- (samba启动失败)smb.service: main process exited, code=exited, status=1/FAILURE
按照指示,前往:journalctl -xe 没什么发现,搜的时候有人说也可以查看 journalctl -r 打出来之后我也看不出什么门道来 又看到有人说 smb 方面可以看看 testparm 我 ...
- Flask从入门到精通之跨站请求伪造保护
默认情况下,Flask-WTF 能保护所有表单免受跨站请求伪造(Cross-Site Request Forgery,CSRF)的攻击.恶意网站把请求发送到被攻击者已登录的其他网站时就会引发CSRF ...