首页 > 其他分享 >xml+dtd约束(很详细)

xml+dtd约束(很详细)

时间:2024-07-26 12:28:55浏览次数:15  
标签:xml XML dtd 标签 约束 语法 DTD 节点

xml+dtd约束(很详细)

XML(可扩展性标记语言)

概述

xml被发明的目的是传输和存储数据,而不是展示数据

xml的标签必须自定义,但是在写标签名的时候一定要有含义

XML的功能

  1. 两个网站和两个程序之间的数据传输
  2. 配置文件 config.xml
  3. 存储数据,充当小型数据库中

作用:规范数据格式,使数据具有结构性,易读易处理

xml与html不同之处

  1. html标签不能自定义,xml标签只能自定义
  2. html标签语法要求不严格;xml语法要求极其严格,必须是成对标签
  3. xml是用来传输和存储数据,html用来展示数据

简单的xml

<root>
<user>star</user>
<msg>大美女</msg>
</root>

image-20240724145326782

xml的基本语法

  • 必须有根节点;根节点是其他所有节点的父节点(上述代码的父节点就是root)
  • xml的头声明可有可无,建议书写

image-20240724150335679

  • 所有的xml标签必须是成对的
  • 标签名区分大小写

image-20240724150749744

  • 标签不可以交叉书写

image-20240724151303917

  • 在xml使用如下字符需要转义
&lt;<
&gt;>
&amp;&
&apos;
&quot;"

元素属性

image-20240724152608513

规则

  • 一个标签可以有多个属性,属性的值必须使用引号引起来

  • 命名时数字不能开头

  • 属性时表示标签自身的一些额外信息,在xml中可有可无

CDATA

语法格式

<![CDATA[不需解析的内容]]>

image-20240724153652503

在特殊字符较少时使用转义字符,特殊字符较多时使用CDATA

php解析xml

X ML是一种数据传输格式,当 PHP 接收到的数据就是一段 XML 的时候,我们的 PHP 应该怎么处理 X ML数据呢?

在 PHP5版本以后,其提供了一个非常非常强大的类库Simplexml 类库,专门用于实现对XML文档的解析操作。

xml解析原理

  1. 读取xml文档中的内容
  2. 形成dom树
  3. 由dom树生成对象并返回

simplexml库

simplexml_load_file():转换 XML 文件为 SimpleXMLElement 对象,然后输出对象的键和元素;返回的是一个对象

<?php
$xml=simplexml_load_file("123.xml");
//var_dump($xml);
echo $xml->user[0]->name;
?>

image-20240724160653675

获取某一个元素的信息

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimage-adadadad.oss-cn-beijing.aliyuncs.com%2Fimg%2F202407241550833.png&pos_id=img-dgTO2QQq-1721967251774

使用php给xml添加节点

使用addChild()函数插入一个节点

<?php
$xml=simplexml_load_file("123.xml");
//使用addChild添加节点
$u=$xml->addChild('user');

$u->addChild('name','小王');
$u->addChild('age','20');

image-20240724161727880

获取某一个元素的信息
image-20240724155037766

使用php给xml添加节点

使用asXML()函数将增加的内容插入到123.xml中

<?php
$xml=simplexml_load_file("123.xml");
//使用addChild添加节点
$u=$xml->addChild('user');

$u->addChild('name','小王');
$u->addChild('age','20');
//使用asXML向123.xml中插入新增节点
$xml->asXML("123.xml");
?>

image-20240724162231997

DTD约束

Document Type Difinition(文档类型自定义),约束XML文档中可以出现的内容,并且XML的解析程序可以自动使用DTD验证XML文档


出现的地方

  1. 直接写在XML文档的前面声明DTD,通常开发的时候会使用这种方式
<!DOCTYPE 根元素[
    <!-- 约束根元素中有哪些子元素 -->
    <!ELEMENT 根元素 (子元素)>
        .......
  1. 使用单独的DTD文件声明DTD,然后XML里面引入进来,开发好后,把内容和DTD分离,DTD迁移到单独文件中

DTD语法

内部的DOCYPE语法

假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

<!DOCTYPE root-element [element-declarations]>

元素的约束

<!ELEMENT element-name (#PCDATA)>

实例:

<!ELEMENT from (#PCDATA)>

子元素出现的次数

默认1次
+:1-N次
?:0-1次
*:0-N次
<!ELEMENT root (user+)>
<!-- user子元素可以出现多次 -->

属性约束

<!ATTLIST 元素名 属性名 数据类型 默认值>
<!-- 实例-->
<!ATTLIST payment type CDATA "check">

image-20240726115005316

image-20240726115106313

完整实例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!-- 约束根元素中有哪些子元素-->
        <!ELEMENT root (user+)>
<!--  约束一级元素中有哪些对应二级元素      -->
        <!ELEMENT user (name,age,hobbys?)>
<!--        约束二级元素hobbys中有哪些三级元素-->
        <!ELEMENT hobbys (hobby+)>
        <!ELEMENT hobby (#PCDATA)>
<!--        约束具体的二级元素-->
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ATTLIST user id ID #REQUIRED>
]>
<root>
    <user id="a1">
        <name>star</name>
        <age>18</age>
        <hobbys>
            <hobby>唱歌</hobby>
            <hobby>跳舞</hobby>
        </hobbys>
    </user>
    <user id="a2">
        <name>xiaoming</name>
        <age>19</age>
    </user>
    <user id="a3">
        <name>小王</name>
        <age>20</age>
    </user>
    <user id="a4">
        <name>小刘</name>
        <age>18</age>
    </user>
</root>
引入外部DTD约束
<!DOCTYPE root-element SYSTEM "filename">
<!DOCTYPE root-element PUBLIC "filename">

SYSTEM通常表示私有的、自定义的DTD

PUBLIC通常表示公认的,别人定义的,规范的DTD

实例

image-20240726120621063

dtd文件中的内容

<!-- 约束根元素中有哪些子元素-->
        <!ELEMENT root (user+)>
<!--  约束一级元素中有哪些对应二级元素      -->
        <!ELEMENT user (name,age,hobbys?)>
<!--        约束二级元素hobbys中有哪些三级元素-->
        <!ELEMENT hobbys (hobby+)>
        <!ELEMENT hobby (#PCDATA)>
<!--        约束具体的二级元素-->
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ATTLIST user id ID #REQUIRED>

查看是否引入成功

image-20240726120838754

标签:xml,XML,dtd,标签,约束,语法,DTD,节点
From: https://blog.csdn.net/2401_83176532/article/details/140712303

相关文章

  • XML Syntax
    XMLSyntaxIntrucuction       https://www.liquid-technologies.com/XML/ CDATA<![CDATA[                       if(a>b){                     ......
  • xml.etree.ElementTree 文档中文翻译; SVG矢量图;Python标准库
    更新中..简介xml.etree.ElementTree实现了一个简洁有效的用于解析和新建XML数据的API。其也被简称为ET。弃用:xml.etree.cElementTree自Python==3.3已被弃用警告:使用时需注意恶意构建的数据,请防范XML漏洞概念XML是一种继承性的分层数据格式,常用树来表示。ET有两个类,Ele......
  • Qt - XML和JSON
    1.XML1.1简介可扩展标记语言,标准通用标记语言(ExtensibleMarkupLanguage)的子集,简称XML,是一种定义电子文档结构和描述其内容的国际标准语言,被设计用来传输和存储数据。可扩展标记语言与Access],Oracle]和SQLServer等数据库不同,数据库提供了更强有力的数据存储和分析能力,例......
  • 需要帮助来提取此 XML 节点 - Python 中的 Excel 连接字符串
    我有一个Python程序,打开Excel(XLSX)文件,并尝试查找<connection>节点。这是connections.xml文件中的完整XML。<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><connectionsxmlns="http://schemas.op......
  • 是否可以从列中删除唯一约束?
    我尝试简单地删除unique=True约束并在命令行中运行flaskdbmigrateflaskdbupgrade,但是当我运行我的烧瓶应用程序时,我仍然收到(sqlite3.IntegrityError)UNIQUEconstraintfailed错误。有没有一种简单的方法可以做到这一点Flask-migrate还是我......
  • Python XML 解析:字符串中的“<”被阻塞
    我有一个使用ET.XMLParser来解析CppCheckXML报告文件的Python模块。当尝试解析字符串中包含“<”的XML元素中的属性之一时,它会令人窒息,它会将其解释为格式错误的XML,例如:<errormsg="Includefile<iostream>notfound.">(注意字符和“iostream”之间的空格必须放......
  • DroneVehicle数据集标签转换(.xml→.txt yolo_obb)
    1.数据集下载:目录1.数据集下载:2.数据集介绍:3.数据集标签转换1.DroneVehicle转DOTA2.DOTA转YOLO_OBB5.数据集标签可视化DroneVenicle数据集是由天津大学收集、标注的大型无人机航拍车辆数据集。DroneVenicle训练集下载地址:https://pan.baidu.com/s/1ptZCJ1mKYqFnMn......
  • 描述带有约束的通用协议的类型
    给定以下python代码:fromtypingimportProtocol,TypeVarclassA:passclassB(A):passclassC(A):passT=TypeVar("T",B,C,contravariant=True)classX(Protocol[T]):deff(self,t:T)->None:...classX......
  • IDEA解决java注释顶格、xml注释右对齐+无空格问题
    先配置java中注释格式: 然后是配置xml中的注释格式:还是CodeStyle,从java往下滑动到xml......
  • SQL ------约束
    约束·概述1.概念:约束是作用于表中字段上的规则,拥有限制储存在表中的数据2.目的:保证数据库中数据的正确性、有效性和完整性3.分类![](https://img2024.cnblogs.com/blog/3480856/202407/3480856-20240722202320072-1596752753.png)注意:约束是作用于......