XML

XML extensiable markup language
xml为了弥补html的缺点
1.标签固定;2、数据和显示绑定在一起  //导致数据不能重用;3.html标签没有等意含义  //导致网络传输问题;4.html浏览器不兼容
xml的用处
1.程序间通讯的标志(QQ通讯)ajax text xml json;2.可以作为配置文件使用;3.小型数据库

xml语法----标签(元素,节点):
1.标签成对出现;2.无内容标签关闭<abc/>;3.标签区分大小写;4.标签不能使用关键字,或以关键字开头。
5.标签由大小写字母,下划线,数字构成,由字母开头;6.标签可以嵌套,但不可以交叉嵌套;7.根元素有且只有一个;8.xml中空格和换行都会作为内容来处理。
<stu>abc</stu> 和
<stu>
abc
</stu>
不同
9.属性可以有多个,内容用双引号,单引号包含,属性中使用以下符号,需使用符号实体。
xml---实体符号
&lt; <    $gt;  >   &amp;  &    &apos; '  &quot; "
xml语法---注释
<!--内容-->
1.内容中不要出现--;2.不能放在标签中;3.注释不能嵌套
xml语法----基本结构
文档声明
<?xml version="1.0" enconding="utf-8" standlone="yse"?>   --1.注意文件的存储类型;2.standalone默认是no,但对于程序一般没有影响。
xml----pi(处理指令)
通过pi使用css文件对xml进行样式自定义
语法:
<?xml--stylesheet type="text/css" href="">

xml----CDATA  对xml中的特殊标签进行原样存储(如:图片的存储)
语法:
<![CDATA[内容]]>
小知识:飞Q内网直连字母;一切文件和程序皆为字符串

xml--- dtd(文档类型定义)(文件约束)(可用于指定小组规范)
1.strict.dtd  2.transitional.dtd  3.frame.dtd
dtd用于xml的逻辑约束;注意需要保证dtd文件的存储类型和引用的它的xml的存储类型一致
常用的约束技术---dtd,schema
xml--- dtd 语法
本地引用
<!DOCTYPE 根元素 SYSTEM "dtd路径"/>

要实现dtd约束功能,需要三个文件,dtd文件,xml文件,html文件。
因为浏览器本身并不会完成对xml的校验,所以创建一个html文件用于触发xml解析器,进行校验。

html文件中的js代码:
<script language="javascript" type="text/script">
var xmldtd=new ActiveXObject(Microsoft.XMLDOM);
xmldtd.validatOnParse=true;
xmldtd.load("xxx.xml");
document.write("error reason="+xmldtd.parseError.reason);
document.write("error line="+xmldtd.parseError.line);
</script>

dtd 按内容位置分为三种:内部dtd ,外部dtd,内外部dtd(css类)

内部dtd语法:<DOCTYPE 根节点 []/>

外部dtd语法:<!DOCTYPE  根节点 SYSTEM ""/>

内外部dtd语法:上两者的混合(很少使用,容易造成管理混乱)

公开的dtd引用---行业规范

<!DOCTYPE 根元素 PUBLIC "DTD名称""DTDurl"/>
本地的dtd引用

<!DOCTYPE 根元素 SYSTEM "dtd路径"/>

dtd示例----  test.dtd
<!ELEMENT 班级(学生+)>
<!ElEMENT 学生 (名字,年龄,介绍>
<!ELEMENT 名字(#PCDATA)>
<!ELEMENT 年龄(#PCDATA)>
<!ELEMENT 介绍(#PCDATA)>

dtd元素:
 <!ELEMENT 元素名 内容或类型>
 
元素的类型:
 #PCDATD:字符和数字,不能再有子元素。
 ANY: dtd中出现的任意元素和字符数字
 EMPTY :必须为空,可以有属性

dtd组合类型示例
<!ELEMENT 家庭(人+,家电*)>
dtd修饰符
+:出现一到多次
*:0-多次
?:0-1次
,:指定顺序
|:选择

dtd属性
<ATTLIST 元素名
      属性名   属性类型  属性特点;
      ...
>
元素属性的类型:
CDATA ----字符和数字
ID    ----值是唯一,字母开头(如学号的使用)
IDREF/IDREFS ---id的引用(可以引用自身的id)
枚举,---(single|married|divoced|windowed)
Entity/Entities---实体

元素属性的特点:
#REQUIERED ----必须有
#IMPLIED----可以有可以没有
#FIXED value----指定固定值
defalult value---指定默认值

默认值写法

dtd实体---(类似于创建别名)
分为引用实体,参数实体
引用实体用法:
在dtd中定义,在xml中使用,&实体名;
引用实体语法:
<ENTITY  实体名 实体内容>
参数实体用法:
在dtd中定义,在dtd中使用,%实体名;  
参数实体语法:
<ENTITY % 实体名 实体内容>

zend studio :phpide
基于eclipse,用于php的开发和调试(本地调试和远程调试)
以工程的概念进行项目开发--可以指定开发路径

可以用于创建xml,dtd文件
创建xml,可以选择创建的xml文件的类型
同时提供设计视图,错误提示等
创建dtd---file--new--others--xml--dtd

dom---文档对象模型--将xml,html解析为dom树(对象)
dom节点分为:元素节点,文本节点,注释节点等
节点与节点的属性属于同一层
$xmldoc= new DOMDocument();
$xmldoc.load(xxx.xml);//将xml文件加载到内存
$xmlNodeList=xmldoc->getElementsByTagName("学生");
$xmlNodeList->length;
$xmlNode=$xmlNodeList->item(0);
$xmlValue=$xmlNode->nodeValue;
$xmlNode->nodeValue="节点内容";
$xmlNode->nodeType;
$xmlNode->createElement("学生");
$xmlNode->setAttribute("属性名","属性值");
$xmlNode->getAttribute("属性名");//返回string
$xmlNode->hasAttribute("属性名");//返回bool

$xmlParentNode=$xmlNode->parentNode->removeChild($xmlNode);
$xmlParentNode.appendChild("节点名");
$xmlParentNode.removeChild("节点名");

//如果保存原文件,则重写原文件;如果保存到新文件,则生成一个新文件保存内容
$xmldoc.save(xxx.xml)//如果保存失败,返回false

注意:1.如果为同一个xml文件,保存两个根节点,会造成文件内容完全丢失。
      2.凡是代码,都是先在内存中对数据进行操作,然后写入文件或数据库
      3.元素节点不能创建元素节点,(王爷不能封王爷,皇帝封王爷)
xpath:使跨层取节点变得简单。
dom:可以跨层取节点,但是当不同层含有同名节点时,dom无法准确的取出。

xpath---xml路径语言
$xmldoc=new DOMDocument();
$xmldoc->load(xxx.xml);
$xmlxpath=new DOMXPath($xmldoc);
$xpth="xpath路径";
$xmlNode=$xmlxpath->query($xpth);
$xmlTag=$xmlNode->tagName;

xpath路径----见xml/xpath.txt文件


SimpleXML
1.simplexml将xml元素转化为对象
2.同名节点被看成数组
3.节点的属性被看成数组
4.与xpath结合使用

$simplexml =simplexml_load_ file(xml文件);
$books=$simplexml->book;//也可以继续往下指,类路径
echo count($books);


$bbs=$simplexml->xpath("//BB");
foreach($bbs as $val){
echo $val."<br/>";
}

SimpleXML 可以加载的对象:
xml文件,
dom对象,
按xml标准编写的字符串,

simplexml_import_dom();
$string=<<<xml       //可以自动处理字串中的单引号,双引号。
...
xml;
simpleload_string($string);
小知识:
1.可以使用文件的默认保存类型,来保存utf-8
2.<base target="_blank">   base:提供页面默认设置

posted @ 2014-03-03 00:37  曹桦伟  阅读(320)  评论(0编辑  收藏  举报