PHPEye开源社区 » PHP周边技术讨论区 » 一个被它困扰好久的按属性查找XML的问题
《Programming PHP》第二版上市
2007-8-10 16:56 caoxk
一个被它困扰好久的按属性查找XML的问题

[code]
<?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>
[/code]
[php]
$dom = new DomDocument;
$dom->validateOnParse = true;
$dom->load('../Config/ErrorMsg.xml');
$objItem = $dom->getElementById('c');
var_dump($objItem);
[/php]
DTD的<!ATTLIST Error ErrorId ID #REQUIRED>不知道要如何设置才能用数字,目前只能用英文字母‘a、b、c’........
PHP不能按属性“c”读出相应的值
我研究好久了,搞不出来,请弟兄们帮帮忙了~~~~谢谢了~~

2007-8-10 19:07 cid73
<!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;
[/php]

2007-8-11 13:59 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;
[/php]

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.