PHP DOMDocument没有返回或加载第一个元素

时间:2014-04-06 12:33:28

标签: php xml dom

我在加载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

1 个答案:

答案 0 :(得分:0)

在此XML文档上使用saveHTML是没有意义的,因为它不代表HTML。 <title>元素在HTML中具有语义含义,它是一个不会在页面上显示的元素,因此这可能是您无法看到1和11的原因。

我怀疑您未能选择娱乐类别,因为您的DTD并未指示name属性代表ID的任何位置。你需要在你的DTD中有这样的东西:

<!ATTLIST category name ID #REQUIRED>