Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php DOMDocument loadXML()无法处理包含CDATA的字符串_Php_Xml_Load_Cdata - Fatal编程技术网

php DOMDocument loadXML()无法处理包含CDATA的字符串

php DOMDocument loadXML()无法处理包含CDATA的字符串,php,xml,load,cdata,Php,Xml,Load,Cdata,我想在这个xml文件中搜索关键字。freshvideo.xml包含“video”标记。我想这样做:例如,如果我搜索“gear slow”或“new England gear”,搜索将返回此“video”元素的“id” 下面是我的xml文件的一个示例 <freshvideos> <video> <id> <![CDATA[ 4f1a6a21e779d227eaff33de8f571f95 ]]>

我想在这个xml文件中搜索关键字。freshvideo.xml包含“video”标记。我想这样做:例如,如果我搜索“gear slow”或“new England gear”,搜索将返回此“video”元素的“id”

下面是我的xml文件的一个示例

<freshvideos>
    <video>
        <id>
            <![CDATA[ 4f1a6a21e779d227eaff33de8f571f95 ]]>
        </id>
        <title>
            <![CDATA[ New England Snowstorm - \"Low Gear\" ]]>
        </title>
        <ensub>
            <![CDATA[ I put it in low gear and take it slow. ]]>
        </ensub>
        <cnsub>
            <![CDATA[ 我挂了抵挡,慢慢开。 ]]>
        </cnsub>

        <filesrc>
            <![CDATA[ videos/New England Snowstorm Low Gear.mp4 ]]>
        </filesrc>
    </video>
</freshvideos>
问题是: 警告:DOMDocument::loadXML()[DOMDocument.loadXML]:StartTag:实体中的元素名称无效 警告:在实体的内容中不允许使用DOMDocument::loadXML()[DOMDocument.loadXML]:序列']]>'

我还想过使用这个分隔符:

$xml = strtolower($xml);
$xml2 =<<<XML
echo strtolower($xml);
XML;
$lowerCaseDom->loadXML($xml2);
$xml=strtolower($xml);

$xml2=当您通过strtolower运行文档时,结果就是这样(请记住,此时您仍在传递字符串,而不是DOMDocument:

<freshvideos>
    <video>
        <id>
            <![cdata[ 4f1a6a21e779d227eaff33de8f571f95 ]]>
        </id>
        <title>
            <![cdata[ new england snowstorm - \"low gear\" ]]>
        </title>
        <ensub>
            <![cdata[ i put it in low gear and take it slow. ]]>
        </ensub>
        <cnsub>
            <![cdata[ 我挂了抵挡,慢慢开。 ]]>
        </cnsub>

        <filesrc>
            <![cdata[ videos/new england snowstorm low gear.mp4 ]]>
        </filesrc>
    </video>
</freshvideos>


您的开始CDATA标记在大小写降低后就不再有效,因此当您尝试将文档作为xml处理时,会得到奇怪的结果。CDATA部分必须由字符串匹配分隔,而不是其他任何内容。

@Kyle您能看一下吗?$xml2是一个heredoc字符串,它不是有效的xml。我不确定您在说什么在那里做。除非你使用{}Try
$xml=$dom->saveXML($dom->documentElement);
Hi@Zarazthuztra!你是对的!我是多么的盲目和愚蠢!谢谢!别担心,伙计,我们一直都遇到这样的小问题。“缺少分号”错误很容易诊断,很难:)这会有点复杂,但我建议抓取CDATA中您想要的每个文本元素,将其降低,然后使用现有的CDATA元素将其放入小写字符串中。将此作为使用CDATA的良好起点:
<freshvideos>
    <video>
        <id>
            <![cdata[ 4f1a6a21e779d227eaff33de8f571f95 ]]>
        </id>
        <title>
            <![cdata[ new england snowstorm - \"low gear\" ]]>
        </title>
        <ensub>
            <![cdata[ i put it in low gear and take it slow. ]]>
        </ensub>
        <cnsub>
            <![cdata[ 我挂了抵挡,慢慢开。 ]]>
        </cnsub>

        <filesrc>
            <![cdata[ videos/new england snowstorm low gear.mp4 ]]>
        </filesrc>
    </video>
</freshvideos>