我在加载XML文档时遇到问题。
是XML文件<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE gallery [
<!ELEMENT gallery (category*)>
<!ELEMENT category (image*)>
<!ELEMENT image (title,comment,password,owner,rating)>
<!ELEMENT title ANY>
<!ELEMENT comment ANY>
<!ELEMENT password ANY>
<!ELEMENT owner ANY>
<!ELEMENT rating ANY>
<!ATTLIST category name CDATA #REQUIRED>
<!ATTLIST image date CDATA #REQUIRED>
]>
<gallery>
<category name="entertainment">
<image date="monday">
<title>1</title>
<comment>2</comment>
<password>3</password>
<owner>4</owner>
<rating>5</rating>
</image>
<image date="friday">
<title>11</title>
<comment>22</comment>
<password>33</password>
<owner>44</owner>
<rating>55</rating>
</image>
</category>
<category name="education">
</category>
<category name="relax">
</category>
<category name="sporting">
</category>
</gallery>
我的PHP打印此XML是
$doc = new DOMDocument();
$doc->validateOnParse = true;
$doc->load(ROOT_PATH."xml/data.xml");
if($doc->validate()) {
print_r($doc->saveHTML());
}
else echo 'Not Validated ';
结果是
2 3 4 5 22 33 44 55
顺便说一句,我无法理解为什么跳过第一个元素。我有选择像这样的元素的问题
$category = $doc->getElementById('entertainment');
if (!$category){
echo 'not found';
}
返回:
not found
答案 0 :(得分:0)
在此XML文档上使用saveHTML是没有意义的,因为它不代表HTML。 <title>
元素在HTML中具有语义含义,它是一个不会在页面上显示的元素,因此这可能是您无法看到1和11的原因。
我怀疑您未能选择娱乐类别,因为您的DTD并未指示name属性代表ID的任何位置。你需要在你的DTD中有这样的东西:
<!ATTLIST category name ID #REQUIRED>