写给XML初学者的一些话

xml|初学

  差不多每天都有人问“什么是 XML”,“XML 能做什么”,“XML 能不能替我做这个”, “XML 会取代什么” 等等诸如此类的问题。由于最近一段时间稍微对 xml 使用了一下,  我来谈谈自己的感觉。这些经验都很浅显,任何一个用过 xml 的人都有,并且见仁见智, 只不过我算刚刚走过这段路,对自己一开始的困惑,误解还记得清,所以拿出来和大家分享一下。

  我觉得初学者可能会走近的误区:

  1. XML 是不是 HTML 的取代者?

  不是。写得好的 html 应该是一个 well-formed 的 xml 文档,其他方面最好不要把他们放在一个水平线上比较。

  2. XML 是不是数据库的取代者?

  不是。

  3. XML 是不是...的取代者?

  都不是。

  这个结论可能听上去很滑稽:XML 是非常非常重要的东西,但它什么都取代不了。

  但这并不奇怪,有人把它比做 ASCII 标准,他们是一切一切的基础,但并没有(也不需要)取代什么。(但是就如同 ASCII 取代了一些没有成大器的字符集定义,XML 也会取代你在应用中自己定义的一些数据传输规范,但没有什么特别主流的东西。)

  刚开始学 XML (或者说没开始学之前)的时候最爱问的一个问题肯定是:使用 XML 能给我带来什么好处?

  我觉得从某种角度上说,使用 XML 有些象使用 OO 面向对象:

    - 你可以用它,你也可以不用它。
    - 如果你的应用非常简单,用它不一定方便,没准儿用了效果还会更差。
    - 和其他实际东西比如数据库,MTS,Web Server比起来,它更像是一个概念,一种方法
    - 项目越大,它的发挥余地越大,作用越大。
    - 一旦真正理解后,哪怕不用 xml parser,也不妨碍你使用这个概念,如同可以抛开特定语言使用 OO。
    - ......

    好像更抽象,更没谱儿了吧。

  那就随便举个例子。比如你本来想在 bbs 应用中的两个模块之间传一些数据:

    - 发言人
    - 密码
    - 标题
    - 内容

    使用四个参数是不太现实的,因为你随时可能要扩展功能,比如再加上个

    - 表情符号

    等等

    不可能每次加个功能,就重新定义一遍函数。

    所以最简单的方法是把他们合并起来作为一个参数传递给函数。

    在有 xml 之前,你可能会使用分隔符:

    str = "发言人=张三;密码=**;标题=abc;内容=xyz"

    到 server 那边使用 dictionary 或 collection 或 split 等等方法把他们拆开。

    (当然可以自己定义对象啦,结构啦等等,但多数情况下还得是纯字符串--比如另一个模块不是自己开发的。)

    这种传递字符串的方法有几个问题,总结成两个最大的方面就是:

    1. 正确的解析它很麻烦。(比如标题正好是“发言人=张三;”怎么办)
    2. 是平面的,没有层次型结构

    你可以写些函数来解决这些问题,比如确保里面肯定有“发言人”,“密码”等等;

    再写些函数做一下字符转义,再写些函数制造出层次性的效果...

    够了!咱还是用 XML 吧。在我目前浅显的认识里:

    - XML 是用来传递数据的
    - XML 让这些数据有了结构 -- 一个树型结构
    - xml 有全套的操作这种结构的方法
    - xml 规范(或者说的实际点,xml parser)帮你确定你创建的字符串是合法的
    - xml 规范(或者说的实际点,xml parser)中有办法验证这个合法性
    - 对于拿到这个字符串的 server component 来说,可以用 xml 中现成的方法来操作它,这就是 xpath, pattern,类似于 T-SQL 语句。(但记住 xml 是树型结构的)
    - XSLT 使用 xpath 对 xml 进行转换(类似于 DTS),其中一种特例是把 XML 转换成 HTML 输出。

时间: 2024-12-23 03:37:05

写给XML初学者的一些话的相关文章

给 XML 初学者

xml|初学 给 XML 初学者 类型: XML/Biztalk 差不多每天都有人问"什么是 XML","XML 能做什么","XML 能不能替我做这个","XML 会取代什么" 等等诸如此类的问题.由于最近一段时间稍微对 xml 使用了一下,我来谈谈自己的感觉.这些经验都很浅显,任何一个用过 xml 的人都有,并且见仁见智,只不过我算刚刚走过这段路,对自己一开始的困惑,误解还记得清,所以拿出来和大家分享一下. 我觉得初学者可

C#中将DataSet的内容写成XML时如何格式化字段数据

许多读者经常询问一个问题,那就是在将DataSet的内容写成XML时,如何格式化字段数据.最常见的需求,就是希望日期时间值与数值数据能够以所需的格式呈现于XML中.欲达此目的,可以采用下列两种作法: ◆使用XmlConvert类. ◆将一个XSLT转换套用至DataSet数据的XML表示. 程序范例 图 12-23所示是程序范例CH12_DemoForm018.cs的执行画面,我们发现,从DataSet写成XML的日期与薪资字段数据皆已采用我们所要求的格式.基本上,本范例是利用XmlConver

java-sql写在xml中,但如何做到灵活

问题描述 sql写在xml中,但如何做到灵活 比如 SELECT * FROM USER WHERE CreateTime=? AND TYPE=? 但是更多的时候,查询不带CreateTime参数.但又不想在java代码中拼凑SQL语句. 想SQL和JAVA尽量分开. 但到一种办法. SELECT * FROM USER 然后在代码中根据参数条件,拼凑WHERE条件,但是这样还是没有解决在JAVA中拼凑SQL的问题. 解决方案 把所有where的参数也放xml中,然后代码中解析xml来拼接SQ

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.7.5 使用StAX写出XML文档

3.7.5 使用StAX写出XML文档 在前一节中,你看到了如何通过写出DOM树的方法来产生XML文件.如果这个DOM树没有其他任何用途,那么这种方式就不是很高效. StAX API使我们可以直接将XML树写出,这需要从某个OutputStream中构建一个XMLStreamWriter,就像下面这样: 这个调用将关闭所有打开的元素. 与使用DOM/XSLT的方式一样,我们不必担心属性值和字符数据中的转义字符.但是,我们仍旧有可能会产生非良构的XML,例如具有多个根节点的文档.并且,StAX当前

编程-民工甲在Swing是一把刀里面写用xml制作菜单,我没看懂,是用xml写出菜单然后用Java调用?

问题描述 民工甲在Swing是一把刀里面写用xml制作菜单,我没看懂,是用xml写出菜单然后用Java调用? XML配置 每个应用程序都千奇百怪,功能各异.如何用一个同样的界面来组织呢?的确,这个界面并非适合所有人.不过这里的所有菜单.按钮.流程图.图标等,其动作都是可以用一个"动作码"类定义的,所有的动作都会回调一个统一的函数.而我们只要在这个函数处插入监听,就可以拦截具体动作码,执行我们想做的任何事情,例如格式化C盘.往aobama@whitehouse.com邮箱发个垃圾邮件啥的

数据分析-C# 读取4g大小的txt文件,并写成xml文件

问题描述 C# 读取4g大小的txt文件,并写成xml文件 我这边有个日志文件,非常的大,这边需要对这个日志文件进行数据分析, 对于每一行的数据进行处理比如ip地址相同的数据:ip:127.0.0.1 , num 22, starttime 2015-2-5 12:21:20 endtime 2015-2-5 23:59:59提取这样格式的数据 并写入xml文件中,由于数据非常的大,写人的非常慢 解决方案 直接用Hadoop,Spark等分布式框架做分析吧,数据量太大了. 这么大的XML解析起来

C#如何把上传的数据写成xml文档

问题描述 C#如何把上传的数据写成xml文档,要详细代码 解决方案 解决方案二:Linq2Xml...神马样的问题,神马样的回答.解决方案三:Xml串行化:[XmlRoot]publicclassProcduct{privateintprodId;[XmlElement]publicintProdId{get{returnprodId;}set{prodId=value;}}privatestringprodName;[XmlElement]publicstringProdName{get{re

给XML初学者建议

差不多每天都有人问"什么是 XML","XML 能做什么","XML 能不能替我做这个","XML 会取代什么" 等等诸如此类的问题.由于最近一段时间稍微对 xml 使用了一下,我来谈谈自己的感觉.这些经验都很浅显,任何一个用过 xml 的人都有,并且见仁见智,只不过我算刚刚走过这段路,对自己一开始的困惑,误解还记得清,所以拿出来和大家分享一下. 我觉得初学者可能会走近的误区: 1. XML 是不是 HTML 的取代者? 不是

一个自写的XML读写/存取属性的Java工具类库

xml   Java 5中的Properties类现在可以使用XML存取,通过loadFromXML和storeToXML方法实现.假设有下面这个属性表:windowSize:  400,400windowLocation:  456,300 使用storeToXML后会得到这样的XML文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "http://j