1. 字符串定义
1-1 单引号定义
不能转义内容中的变量等东西。
$_a = ;
//单引号
$_string1 = 'This is $_a a String';
1-2 双引号定义
可以转义变量、转义字符等。
$_string2 = "This is $_a a String";
1-3 复杂式
格式复杂,注意定义头后面没有空格;尾巴上顶格,后面没有代码或者注释什么的;中间字符也要整体到顶。
$_xml = <<<_xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
<version>1.0</version>
<info>xml解析测试</info>
<user>
<name>飘城Web俱乐部</name>
<url>http://www.yc60.com</url>
<author sex="男">李炎恢</author>
</user>
<user>
<name>北风网</name>
<url>http://www.ibeifeng.com</url>
<author sex="女">谁谁谁</author>
</user>
<user>
<name>电驴</name>
<url>http://www.verycd.com</url>
<author sex="男">姓黄的</author>
</user>
</root>
_xml;
2. 使用SimpleXML操作XML
2-1 创建SimpleXML对象和生成XML文件
创建SimpleXML对象时要传入XML字符串,然后生成XML文件时指定文件的地址。
//创建一个simplexml对象,传入xml字符串
$_sxe = new SimpleXMLElement($_xml);
//生成xml文件
$_sxe->asXML('text.xml');
2-2 载入XML文件和测试
使用simple_load_file()函数载入XML文件,再用各种方法测试显示是否载入成功。
//载入xml文件,simplexml
$_sxe = simplexml_load_file('text.xml');
//测试
// echo $_sxe;//这个是错误的,不能显示成功的
echo $_sxe->asXML();
var_dump($_sxe);
print_r($_sxe);
Reflection::export(new ReflectionClass($_sxe));//反射
2-3 访问XML
2-3-1访问一级标签的值
同一级下同样的标签只有有多个的时候,把它们看成数组操作,当然也可以进行遍历。
//载入XML
$_sxe = simplexml_load_file('text.xml');
//读一级标签的值,version是标签名
echo $_sxe->version;
//如果有多个version标签
print_r($_sxe->version);
echo $_sxe->version[];
echo $_sxe->version[];
echo $_sxe->version[];
foreach($_sxe->version as $_v){
echo '['.$_v.']';
}
2-3-2 访问二级标签的值
访问二级标签或者后面级别标签的值,要像多维数组遍历的那样,一级一级地往下找过去。
//如果要访问二级标签,必须一层一层指明
echo $_sxe->user[]->name;
//遍历所有的name值
foreach($_sxe->user as $_user){
echo '['.$_user->name.']';
}
2-3-3 访问标签里面的属性的值
使用simplexml_load_file()里面的attributes()方法,取出标签属性的值。标签属性好像只有一个的样子,所以不用传入参数的啦。
//输出第二个user的author的性别
echo $_sxe->user[]->author->attributes();
2-3-4 使用xpath访问XML节点
看打印出来的$_version数组的样子,可以用$_version[0]或者$_version[0][0]来表示值,不过前者相对于后者来说比较方便和便于理解。
//使用xpath来获取XML节点操作
$_sxe = simplexml_load_file('text.xml');
//获取version的值
$_version = $_sxe->xpath('/root/version');
var_dump($_version);
echo $_version[];
遍历的时候和上面差不多。二级或者后面级数标签的查看就是路径参数的设置(注意,root前面的“/”不能少啊,不然没有值)。属性值的查看也没有什么变化。
//遍历
foreach($_version as $_v){
echo $_v;
}
//进行二级标签
$_name = $_sxe->xpath('/root/user/name');
// print_r($_name);
echo $_name[];
//属性查看
$_author = $_sxe->xpath('/root/user/author');
echo $_author[]->attributes();
3. 使用DOMDocument操控XML
3-1 DOMDocument的解析
创建dom对象和载入xml文件。
//创建dom对象
$_doc = new DOMDocument();
//载入xml文件
$_doc->load('text.xml');
3-2 访问xml
像javascript一样按照名称找标签,item(n)表示第几个标签,nodeValue表示标签的值,length表示这类标签的长度。
//取第一个version的值,getElementsByTagName就是查找传入的标签
$_version = $_doc->getElementsByTagName('version');
//这类标签的长度
echo $_version->length;
//item(n)表示第n个标签,以下为第一个version标签的值
echo $_version->item()->nodeValue;
//标签值遍历
foreach($_version as $_v){
echo $_v->nodeValue;
}
3-3 声明domdocument对象和生成xml
声明domdocument对象时传入版本和编码,生成xml时传入xml文件地址。有点自动化的样子,很准确。
//声明domdocument对象
$_doc = new DOMDocument('1.0','utf-8');
//生成xml
$_doc->save('bbb.xml');
3-4 xml中标签和值的插入以及标准格式化输出
先后什么的不用介意啊!!
//使用xml标准化格式输出
$_doc->formatOutput = true;
//使用createelement来创建一个标签
$_root = $_doc->createelement('root');
//在root标签里添加version标签
$_version = $_doc->createelement('version');
//把version标签添加到root标签内
$_root->appendChild($_version);
//在version里面填入一个字符串
$_versionTextNode = $_doc->createTextNode('1.0');
//将1.0放入version标签
$_version->appendChild($_versionTextNode);
//将root主标签添加到xml文件里
$_doc->appendChild($_root);