
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.