标题: 一个被它困扰好久的按属性查找XML的问题
caoxk
新手上路
Rank: 1



UID 127
精华 0
积分 0
帖子 8
翻译 0
原创 0
阅读权限 10
注册 2007-6-27
来自 中国
状态 离线
发表于 2007-8-10 16:56  资料  主页 短消息  加为好友  添加 caoxk 为MSN好友 通过MSN和 caoxk 交谈
一个被它困扰好久的按属性查找XML的问题



<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ErrorMsg [
<!ELEMENT ErrorMsg (Error+)>
<!ELEMENT Error (title,explicate,resolvent)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT explicate (#PCDATA)>
<!ELEMENT resolvent (#PCDATA)>
<!ATTLIST Error ErrorId ID #REQUIRED>
]>
<ErrorMsg>
        <Error ErrorId="a">
                 <title>账户E-mail格式不符合</title>
                 <explicate>此项目为必填项,账户格式必须是一个有效的E-MAIL邮箱地址,建议输入您的常用E-MAIL邮箱地址。</explicate>
                 <resolvent>请正确输入您的常用邮箱</resolvent>
        </Error>
    <Error ErrorId="b">
                 <title>用户名格式不符合</title>
                 <explicate>此项为非必填项,用户名由4至20个字符组成,字符以小写英文字母、数字或下环线“_”组成,且第一个字符必须是英文字母。如“tom_2008”</explicate>
                 <resolvent>按用户名规则重新输入合法的用户名</resolvent>
        </Error>
    <Error ErrorId="c">
                 <title>账户E-mail已经存在</title>
                 <explicate></explicate>
                 <resolvent></resolvent>
        </Error>
    <Error ErrorId="d">
                 <title>用户名已经存在</title>
                 <explicate></explicate>
                 <resolvent></resolvent>
        </Error>
    <Error ErrorId="e">
                 <title>密码不符合</title>
                 <explicate>必填项,密码必须由6至20个字符组成</explicate>
                 <resolvent></resolvent>
        </Error>
    <Error ErrorId="f">
                 <title>输入的密码有误</title>
                 <explicate>请重新输入密码</explicate>
                 <resolvent>如果忘记了密码,请点这里取回密码</resolvent>
        </Error>
    <Error ErrorId="g">
                 <title>输入的账户不存在</title>
                 <explicate>您输入的账户或用户名并没有创建,请确认。点这里创建新的账户</explicate>
                 <resolvent>如果你已创建账户,请重新输入,如果要创建新账户,请点这里开始创建。</resolvent>
        </Error>
</ErrorMsg>



PHP代码如下:
$dom = new DomDocument;
$dom->validateOnParse true;
$dom->load('../Config/ErrorMsg.xml');
$objItem $dom->getElementById('c');
var_dump($objItem);


DTD的<!ATTLIST Error ErrorId ID #REQUIRED>不知道要如何设置才能用数字,目前只能用英文字母‘a、b、c’........
PHP不能按属性“c”读出相应的值
我研究好久了,搞不出来,请弟兄们帮帮忙了~~~~谢谢了~~

顶部
cid73
版主
Rank: 7Rank: 7Rank: 7



UID 40
精华 2
积分 25
帖子 32
翻译 0
原创 0
阅读权限 100
注册 2007-5-23
状态 离线
发表于 2007-8-10 19:07  资料  短消息  加为好友 
<!ATTLIST Error ErrorId ID #REQUIRED> 中 ErrorId 的类型是 ID, 必须遵循 Name 规则, 即只能以 [_a-zA-Z] 开头, 不能以数字开头, 且在整个文档中必须为唯一.

PHP代码如下:
$domDoc = new DomDocument;
$domDoc->validateOnParse true;
$domDoc->loadXML($xml);
$domEle $domDoc->getElementById('c');
echo 
'ErrorId: '$domEle->getAttribute('ErrorId');
echo 
"\n";
echo 
'title: '$domEle->getElementsByTagName('title')->item(0)->nodeValue;



顶部
caoxk
新手上路
Rank: 1



UID 127
精华 0
积分 0
帖子 8
翻译 0
原创 0
阅读权限 10
注册 2007-6-27
来自 中国
状态 离线
发表于 2007-8-11 13:59  资料  主页 短消息  加为好友  添加 caoxk 为MSN好友 通过MSN和 caoxk 交谈
万分感谢,问题已经解决!
我小改了一下,把输入XML字串的方式改为读取文件的方式,代码如下:

PHP代码如下:
$domDoc = new DomDocument;
$domDoc->validateOnParse true;
$domDoc->load('ErrorMsg.xml');
$domEle $domDoc->getElementById('c');
echo 
'ErrorId: '$domEle->getAttribute('ErrorId');
echo 
"\n<br>\n";
echo 
'title: '$domEle->getElementsByTagName('title')->item(0)->nodeValue;



顶部
 


PHPEye开源社区


当前时区 GMT+8, 现在时间是 2008-10-12 07:15

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.015714 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - PHPEye开源社区 - Archiver