XML

可扩展标记语言

文档声明

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

standalone
no–该文档会依赖关联其他文档
yes–这是一个独立的文档

用来声明xml的基本属性,用来指挥解析引擎如何去解析当前xml
通常一个xml都要包含并且只能包含一个文档声明
xml的文档必须在整个xml的最前面,在文档声明之前不能有任何内容

<?xml version="1.0" ?>
--version是必须存在的属性,表明当前xml所遵循规范的版本,目前位置都写1.0就可以了
<?xml version="1.0" encoding="utf-8" ?>
--encoding用来只会解析引擎在解析xml时使用的编码,一定要保证xml格式的数据在保存时使用的编码和解析时使用的编码必须一致,才不会有乱码问题
<?xml version="1.0" encoding="utf-8" standalone="yes" />
--standalone属性用来指明当前xml是否是一个独立的xml,默认值是yes表明当前文档不需要依赖于其他文档,如果当前文档依赖其他文档而存在则需要将此值设置为no

encoding

encoding方式与文件保存方式必须保持一致

元素的定义

<元素名称 属性名称=“属性的值">
</元素名称>

注释

CDATA区

<和&是非法的,需要转义
“<”:<
“>”:>
“&”:&
" --> "
’ --> ’

如果某字符串有较多字符,且包含类似标签或关键字的文字,可以用CDATA让包装XML不解析

<![CDATA[......]]>

服务器给客户端返回数据有时候会用

处理指令

处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
<?xml-stylesheet type="text/css" href="1.css"?>

XML解析

DOM

document object model
把整个XML读到内存,形成树结构
整个文档称为document对象
属性 Attribute
元素节点 Element
文本 Text
上面4个都称为Node

SAX

Simple API for XML 基于事件驱动,读一行,解析一行
不可进行增删,只能查询,省内存

解决方案

dom4j:使用较广泛
jaxp:sun公司,繁琐
jdom:

dom4j

//1.创建sax读取对象
Reader reader = new SAXReader();
//2.指定解析的XML源
Document document = reader.read(new File("");
//3.得到元素
Element rootElement = document.getRootElement();
//获取元素下面的子元素
rootElement.element("");
//获取所有子元素
List<Element> elements = rootElement.elements();

Xpath的作用

xml的路径语言,用于快速定位元素(需要添加jar包 jaxen)

//使用Xpath获取第一个元素
element.selectSingleNode("xpath描述");
//获取所有
element.selectNodes("xpath描述");

XML约束

DTD

语法自成一派,可读性差,文件可命名为.dtd后缀
<!ELEMENT 元素的名称 类型>
如:

<!ELEMENT stus (stu)+> stus元素下有多个元素stu <!ELEMENT stu (name,age)> stu下有两个元素,顺序必须保证 <!ELEMENT name(#PCDATA)> <!ELEMENT age (#PCDATA)>

引入DTD:

]>

元素个数
+:有1个或多个
*:有0个或多个
?:零个或一个

属性类型定义
CDATA:普通文字
ID:属性值必须唯一

,:元素按顺序
|:有一个即可

<!ATTLIST 元素名称 属性名称 属性类型 默认值>
如:

<!ATTLIST stu id ID #IMPLIED> stu有一个文本属性,也可没有
Schema

语法就是XML,解析方便

文件后缀xsd

xmlns:名称空间/命名空间
targetNamespace:目标名称空间,下面定义的元素都与此名称空间绑定
elementFormDefault:元素格式化情况










xsd被W3C标准约束,XML(实例文档)被xsd约束
引用Schema:

名称空间的作用
一个XML如果想指定约束规则,用DTD则只能指定一个
用schema,则可以有多个。
换句话说,XML可引用多个schema,只能引用 一个DTD,名称空间的作用就是在写元素时可指定该元素用哪一套约束规则
aa:name bb:name

web服务器软件

Tomcat(free)
webLogic BEA
Websphere IBM
IIS Microsoft

Tomcat

tomcat.apache.org
默认端口号:8080
mysql

Tomcat目录介绍
  • bin
    包含一些jar、bat、startup.bat
  • conf
    tomcat配置,server.xml web.xml
  • lib
    tomcat运行所需的文件
  • logs
    运行日志文件
  • temp
    临时文件
  • webapps
    发布到tomcat服务器上的项目
  • work
    jsp翻译成class的文件存放地

发布项目到tomcat

让其他电脑访问本电脑的资源,三种方式
1.将资源文件放到webapps/ROOT,访问http://localhost:8080/stu.xml
http://localhost:8080对应的是webapps/ROOT
或 在webapps下新建一个文件夹,如xml,将资源文件放到此文件夹中
http://localhost:8080/xml/stu.xml
http://localhost:8080/xml对应的是webapps/xml

2.配置虚拟路径
使用localhost:8080打开tomcat首页,在左侧找到tomcat文档入口,在文档页面左侧找到Context入口并进入
http://localhost:8080/docs/config/context.html
在conf/server.xml找到host节点
增加
浏览器可访问http://localhost:8080/a/stu.xml

3.配置虚拟路径
在tomcat/conf/cataxlina/localhost/新建xml文件stu.xml
在stu.xml文件中写入

浏览器可访问http://localhost:8080/stu/stu.xml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Qt的`QXmlStreamReader`解析XML的示例代码: ```cpp #include <QXmlStreamReader> #include <QDebug> void parseXML(const QString& xmlData) { QXmlStreamReader xmlReader(xmlData); while (!xmlReader.atEnd()) { xmlReader.readNext(); if (xmlReader.isStartElement()) { QString elementName = xmlReader.name().toString(); if (elementName == "Ip") { QString ip = xmlReader.readElementText(); qDebug() << "IP: " << ip; } else if (elementName == "Port") { QString port = xmlReader.readElementText(); qDebug() << "Port: " << port; } else if (elementName == "DataList") { QString id = xmlReader.attributes().value("id").toString(); qDebug() << "DataList ID: " << id; } else if (elementName == "csvPath") { QString csvPath = xmlReader.readElementText(); qDebug() << "CSV Path: " << csvPath; } else if (elementName == "csvFile") { QString csvFile = xmlReader.readElementText(); qDebug() << "CSV File: " << csvFile; } } } if (xmlReader.hasError()) { qDebug() << "XML parsing error: " << xmlReader.errorString(); } } int main() { QString xmlData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" "<Config>" " <Ip>127.0.0.1</Ip>" " <Port>8888</Port>" " <DataList id=\"1\">" " <csvPath>D:/Confile</csvPath>" " <csvFile>computech20230707.csv</csvFile>" " </DataList>" " <DataList id=\"2\">" " <csvPath>D:/Confile</csvPath>" " <csvFile>computech20230708.csv</csvFile>" " </DataList>" "</Config>"; parseXML(xmlData); return 0; } ``` 在上述示例中,我们定义了一个`parseXML`函数,该函数接收XML数据作为参数,并使用`QXmlStreamReader`进行解析。 在解析过程中,我们使用`readNext`函数逐个读取XML节点。通过使用`isStartElement`函数判断当前节点是否为开始元素,并使用`name`函数获取元素名称。 根据元素名称,我们可以执行适当的操作。例如,当元素名称为"Ip"时,我们使用`readElementText`函数读取元素的文本内容,并将其打印输出。 类似地,我们可以处理其他元素如"Port"、"DataList"、"csvPath"和"csvFile"。 在示例中,我们将XML数据作为字符串传递给`parseXML`函数进行解析。你可以根据实际需求从文件或其他来源读取XML数据,并传递给解析函数进行处理。 请注意,这只是一个简单的示例,你可以根据实际需求进行更复杂的处理和错误检查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值