公司网站建设服务费计入什么科目,有免费的接码平台吗,发外链的网站排名,WordPress如何导入md文件介绍XML语法及应用 1.XML基础知识1.1什么是XML语言1.2 XML 和 HTML 之间的差异1.3 XML 用途 2.XML语法2.1基础语法2.2XML元素2.3 XML属性2.4XML命名空间 3.XML验证3.1xml语法验证3.2自定义验证3.2.1 XML DTD3.2.2 XML Schema3.2.3PCDATA和CDATA区别3.2.4 参考 4.xml解析4.1准备… 介绍XML语法及应用 1.XML基础知识1.1什么是XML语言1.2 XML 和 HTML 之间的差异1.3 XML 用途 2.XML语法2.1基础语法2.2XML元素2.3 XML属性2.4XML命名空间 3.XML验证3.1xml语法验证3.2自定义验证3.2.1 XML DTD3.2.2 XML Schema3.2.3PCDATA和CDATA区别3.2.4 参考 4.xml解析4.1准备工作4.2 javascript解析4.3 java解析 1.XML基础知识
1.1什么是XML语言
XML 被设计用来传输和存储数据。 HTML 被设计用来显示数据。 XML 指可扩展标记语言eXtensible Markup Language。 可扩展标记语言英语Extensible Markup Language简称XML是一种标记语言是从标准通用标记语言SGML中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言XSL、XBRL和XPath等。
1.2 XML 和 HTML 之间的差异
XML 不是 HTML 的替代。 XML 和 HTML 为不同的目的而设计 XML 被设计用来传输和存储数据其焦点是数据的内容。 HTML 被设计用来显示数据其焦点是数据的外观。 HTML 旨在显示信息而 XML 旨在传输信息。
1.3 XML 用途
XML 应用于 Web 开发的许多方面常用于简化数据的存储和共享。
XML 把数据从 HTML 分离 如果您需要在 HTML 文档中显示动态数据那么每当数据改变时将花费大量的时间来编辑 HTML。 通过 XML数据能够存储在独立的 XML 文件中。这样您就可以专注于使用 HTML/CSS 进行显示和布局并确保修改底层数据不再需要对 HTML 进行任何的改变。通过使用几行 JavaScript 代码您就可以读取一个外部 XML 文件并更新您的网页的数据内容。XML 简化数据共享 在真实的世界中计算机系统和数据使用不兼容的格式来存储数据。 XML 数据以纯文本格式进行存储因此提供了一种独立于软件和硬件的数据存储方法。 这让创建不同应用程序可以共享的数据变得更加容易。XML 简化数据传输 对开发人员来说其中一项最费时的挑战一直是在互联网上的不兼容系统之间交换数据。 由于可以通过各种不兼容的应用程序来读取数据以 XML 交换数据降低了这种复杂性。
2.XML语法
2.1基础语法 1.XML 声明文件的可选部分如果存在需要放在文档的第一行,备注版本和语言【可选】 ?xml version1.0 encodingutf-8?2.XML必须有个并且只有一个根元素把所有都包围起来 person
..........
/person3.XML是一个树状结构支持层层嵌套 ?xml version1.0 encodingutf-8?
bookstorebook categoryCOOKINGtitle langenEveryday Italian/titleauthorGiada De Laurentiis/authoryear2005/yearprice30.00/price/bookbook categoryCHILDRENtitle langenHarry Potter/titleauthorJ K. Rowling/authoryear2005/yearprice29.99/price/bookbook categoryWEBtitle langenLearning XML/titleauthorErik T. Ray/authoryear2003/yearprice39.95/price/book
/bookstore4.XML的一个标签必须有对应的关闭开关 5.XML的元素属性必须加引号 错误:tangddddd 正确tangddd/tang
错误tag date200-12-01fff/tag 正确tag date2002-12-01fff/tag6.特殊字符转义 在 XML 中只有字符 “” 和 “” 确实是非法的。大于号是合法的但是用实体引用来代替它是一个好习惯。 转义符号
lt; 小于
gt; 大于
amp; 符号
apos; 单引号
quot; 双引号
!-- 错误--
sql select * from test where id2/sql
正确
sql select * from test where id lt; 2/sql如果不想使用转义则可以加如下格式忽略 ! [ CDATA 忽略检查的文本 sql select * from test where id ![ CDATA 2 /sql7.XML注释 !-- This is a comment --2.2XML元素
XML 元素指的是从且包括开始标签直到且包括结束标签的部分。
一个元素可以包含
其他元素文本属性或混合以上所有…
bookstorebook categoryCHILDRENtitleHarry Potter/titleauthorJ K. Rowling/authoryear2005/yearprice29.99/price/bookbook categoryWEBtitleLearning XML/titleauthorErik T. Ray/authoryear2003/yearprice39.95/price/book
/bookstore在上面的实例中bookstore 和 book 都有 元素内容
因为他们包含其他元素。book 元素也有属性categoryCHILDREN。
title、author、year 和 price 有文本内容
因为他们包含文本。XML 元素必须遵循以下命名规则 名称可以包含字母、数字以及其他的字符 名称不能以数字或者标点符号开始 名称不能以字母 xml或者 XML、Xml 等等开始 名称不能包含空格 可使用任何名称没有保留的字词。 2.3 XML属性
属性通常提供不属于数据组成部分的信息。在下面的实例中文件类型与数据无关但是对需要处理这个元素的软件来说却很重要
file typegifcomputer.gif/file因使用属性而引起的一些问题
属性不能包含多个值元素可以属性不能包含树结构元素可以属性不容易扩展为未来的变化
2.4XML命名空间
XML 命名空间提供避免元素命名冲突的方法我们看一个例子 a.xml
table
tr
tdApples/td
tdBananas/td
/tr
/tableb.xml
table
nameAfrican Coffee Table/name
width80/width
length120/length
/table假如这两个 XML 文档被一起使用由于两个文档都包含带有不同内容和定义的 元素就会发生命名冲突。XML 解析器无法确定如何处理这类冲突。 XML解决方案 在 XML 中的命名冲突可以通过使用名称前缀从而容易地避免。 该 XML 携带某个 HTML 表格和某件家具的信息 h:table
h:tr
h:tdApples/h:td
h:tdBananas/h:td
/h:tr
/h:tablef:table
f:nameAfrican Coffee Table/f:name
f:width80/f:width
f:length120/f:length
/f:table这个前缀就用命名空间来展示 当命名空间被定义在元素的开始标签中时所有带有相同前缀的子元素都会与同一个命名空间相关联。命名空间可以在他们被使用的元素中或者在 XML 根元素中声明 语法 xmlns:前缀名“…” root xmlns:hhttp://www.w3.org/TR/html4/
xmlns:fhttp://www.w3cschool.cc/furnitureh:table
h:tr
h:tdApples/h:td
h:tdBananas/h:td
/h:tr
/h:tablef:table
f:nameAfrican Coffee Table/f:name
f:width80/f:width
f:length120/f:length
/f:table/root默认命名空间 我们取消掉 :前缀就变成默认的命名空间默认命名空间在xml里面就不用使用 前缀: 来标注元素了 语法xmlns“namespaceURI” root xmlnshttp://www.w3.org/TR/html4/
xmlns:fhttp://www.w3cschool.cc/furnituretable
tr
tdApples/h:td
tdBananas/h:td
/tr
/tablef:table
f:nameAfrican Coffee Table/f:name
f:width80/f:width
f:length120/f:length
/f:table/root在实战中如果一个xml里有多个命名空间我们一半把使用得最多得那个作为默认命名空间 3.XML验证
3.1xml语法验证 如果XML语法错误解析器会自动验证 XML 文档必须有一个根元素XML元素都必须有一个关闭标签XML 标签对大小写敏感XML 元素必须被正确的嵌套XML 属性值必须加引号
3.2自定义验证
就是希望写一个xml需要遵循哪些要求如有多少元素元素的结构怎么样元素属性和数据类型是哪些这里要用到XML自定义验证XML提供 DTD和Schema两种语法机制
3.2.1 XML DTD
?xml version1.0 encodingISO-8859-1?
!DOCTYPE note SYSTEM Note.dtd
note
toTove/to
fromJani/from
headingReminder/heading
bodyDont forget me this weekend!/bodyNote.dtd
!DOCTYPE note
[
!ELEMENT note (to,from,heading,body) !--有哪些元素--
!ELEMENT to (#PCDATA) !--to 元素内容是可解析的内容--
!ELEMENT from (#PCDATA)
!ELEMENT heading (#PCDATA)
!ELEMENT body (#PCDATA)
]3.2.2 XML Schema
W3C 支持一种基于 XML 的 DTD 代替者它名为 XML SchemaSchema比DTD更有扩展性
note.xsd文件
?xml version1.0?
xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema
targetNamespacehttp://www.w3schools.com
xmlnshttp://www.w3schools.com
elementFormDefaultqualifiedxs:element namenotexs:complexType!--note是一个复合类型还有子元素--xs:sequence !--元素必须按照顺序出现--xs:element nameto typexs:string/ !--子元素名和数据类型--xs:element namefrom typexs:string/xs:element nameheading typexs:string/xs:element namebody typexs:string//xs:sequence/xs:complexType
/xs:element/xs:schemaxml里面引用
?xml version1.0?note
xmlnshttp://www.w3schools.com
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocationhttp://www.w3schools.com note.xsdtoTove/tofromJani/fromheadingReminder/headingbodyDont forget me this weekend!/body
/note上述只简单介绍了dtd和schema了解其基本意思更多语法可查看schema相关的学习资源在schema的基础扩展出WSDL语言描述XML接口是SOA技术的基础 3.2.3PCDATA和CDATA区别
XML 文档中的所有文本均会被解析器解析。只有 CDATA 区段中的文本会被解析器忽略。 默认情况被解析器解析的文本就是PCDATA 术语 CDATA 是不应该由 XML 解析器解析的文本数据。像 “” 和 “” 字符在 XML 元素中都是非法的。 “” 会产生错误因为解析器会把该字符解释为新元素的开始。 “” 会产生错误因为解析器会把该字符解释为字符实体的开始。 某些文本比如 JavaScript sql代码包含大量 “” 或 “” 字符。为了避免错误可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。 CDATA 部分由 “![CDATA[ 开始由 ]]” 结束 eg:
namefirstBill/firstlastGates/last/name里面内容是要被解析的最终效果如下
name
firstBill/first
lastGates/last
/nameeg: script里面的我们不希望被解析则可使用 “![CDATA[ 开始由 ]]” 包围起来 script
![CDATA[
function matchwo(a,b)
{
if (a b a 0) then
{
return 1;
}
else
{
return 0;
}
}
]]
/script3.2.4 参考
spring的配置
?xml version1.0 encodingUTF-8?beans !-- 默认命名空间 --xmlnshttp://www.springframework.org/schema/beans !--带后缀的空间--xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:jeehttp://www.springframework.org/schema/jee xmlns:txhttp://www.springframework.org/schema/txxmlns:contexthttp://www.springframework.org/schema/context!--schema引用--xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsddefault-lazy-inittrue
4.xml解析
4.1准备工作
用servler发布一个xml报文服务
WebServlet(urlPatterns {/myxml}
)
public class XmlServlet extends HttpServlet {public XmlServlet() {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType(text/xml);response.setHeader(Cache-Control, no-cache);response.setCharacterEncoding(utf-8);StringBuffer returnXML null;int keyInt true;returnXML new StringBuffer(?xml version\1.0\ encoding\utf-8\?\n);returnXML.append(books \n);returnXML.append(book id\1\ \n);returnXML.append( title lang\ch\研发那些事/title\n);returnXML.append( author蒋增奎/author\n);returnXML.append(year2005/year\n);returnXML.append( price30.00/price\n);returnXML.append( /book\n);returnXML.append(book id\2\ \n);returnXML.append( title lang\en\day day up/title\n);returnXML.append( authorsmith/author\n);returnXML.append(year2019/year\n);returnXML.append( price40.00/price\n);returnXML.append( /book\n);returnXML.append(/books \n);PrintWriter out response.getWriter();try {out.println(returnXML);} finally {out.close();}}
}
访问http://localhost:8080/web01/myxml
4.2 javascript解析 % page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitlexml解析/titlescript srchttps://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js/scriptscript// 读取xml文件function loadXMLDoc(filename) {var xhttp;if (window.XMLHttpRequest) {xhttp new XMLHttpRequest();} else {// 针对老版本IE浏览器xhttp new ActiveXObject(Microsoft.XMLHTTP);}xhttp.open(GET, filename, false);// try {// xhttp.responseType msxml-document;// } catch (err) {}xhttp.send();return xhttp.responseXML;}// 解析xml文件function parserXML(xml) {var xmlDoc loadXMLDoc(xml);var books xmlDoc.getElementsByTagName(book);var ret;for (var i 0; i books.length; i) {var book books[i];var title book.getElementsByTagName(title)[0].firstChild.nodeValue;var author book.getElementsByTagName(author)[0].firstChild.nodeValue;var price book.getElementsByTagName(price)[0].firstChild.nodeValue;var year book.getElementsByTagName(year)[0].firstChild.nodeValue;console.log(Title: title , Author: author , price: price , Year: year);rettrtdtitle/tdtdauthor/tdtdprice/tdtdyear/td/tr;}return ret;}// 调用解析xml文件的函数//parserXML(books.xml);function dd(){// $(table).append(trtd研发那些事/tdtd蒋增奎/tdtd40/td/tr);var ret parserXML(http://localhost:8080/web01/myxml);$(table).append(ret);}/script
/head
body
input typebutton valuexml渲染 onclickdd()
table width600 border1theadtrth书名/thth作者/thth价格/thth出版日期/th/tr/theadtbody/tbody
/table
/body
/html
效果
4.3 java解析
这里用到dom4j框架细节可参考java三方框架
package com.jsoft.json;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;/*** class: com.jsoft.json.XmlParse* description:* author: jiangzengkui* company: 教育家* create: 2023-12-11 23:09*/
public class XmlParse {/*** 获得一个连接的源码* param httpUrl* return*/public static String doGet(String httpUrl) {InputStream inputStream null ;StringBuffer result null;BufferedReader bufferedReader null ;HttpURLConnection httpURLConnection null ;try {//初始化URL传入想访问的地址URL url new URL(httpUrl);//打开URL连接并新建HttpURLConnection对象httpURLConnection (HttpURLConnection)url.openConnection();//设置请求banhttpURLConnection.setRequestMethod(GET);httpURLConnection.setConnectTimeout(15000);httpURLConnection.setReadTimeout(15000);result new StringBuffer() ;httpURLConnection.connect();if(httpURLConnection.getResponseCode() 200) {inputStream httpURLConnection.getInputStream();String inputLine;if(inputStream ! null) {bufferedReader new BufferedReader(new InputStreamReader(inputStream,UTF-8));while((inputLine bufferedReader.readLine()) ! null) {result result.append(inputLine);}}}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if(bufferedReader ! null) {try {bufferedReader.close();} catch (IOException e2) {e2.printStackTrace();}}if(inputStream ! null) {try {inputStream.close();} catch (IOException e2) {e2.printStackTrace();}}httpURLConnection.disconnect();}return result.toString();}public static void main(String arg[]) throws DocumentException {String resultString doGet(http://localhost:8080/web01/myxml);System.out.println(resultString);Document document DocumentHelper.parseText(resultString);Element root document.getRootElement();for (Iterator i root.elementIterator(); i.hasNext();) {Element element (Element) i.next();String title element.elementText(title);String author element.elementText(author);String year element.elementText(year);String price element.elementText(price);System.out.println(titletitle;authorauthor;yearyear;priceprice);}}
}效果