php DOMDocument loadXML()无法处理包含CDATA的字符串
我想在这个xml文件中搜索关键字。freshvideo.xml包含“video”标记。我想这样做:例如,如果我搜索“gear slow”或“new England gear”,搜索将返回此“video”元素的“id” 下面是我的xml文件的一个示例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 ]]>
<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>