Php 在此情况下,建议使用名称空间解析无效xml响应的正确方法
我正在使用php解析API的xml响应。以下是一个示例响应- 在iframe src中检查具有有效标记和单个参数的工作代码 我现在在想什么 现在,按照@hakre在我的- 我试过使用DOMDocument::loadHTML,但正如我预期的那样失败了。给出如下警告:警告:DOMDocument::loadHTML:标记q:响应在实体中无效,第2行 为中列出的字符转义字符串的特定部分 问题: 最后,在我的例子中,如果我必须转义字符串的某个特定部分,那么我为什么不首先查找这些分隔符并返回它们呢?那么在这种情况下使用DOMDocument::loadXML有什么好处呢?我想这是一个很常见的情况Php 在此情况下,建议使用名称空间解析无效xml响应的正确方法,php,xml,xml-parsing,xml-namespaces,Php,Xml,Xml Parsing,Xml Namespaces,我正在使用php解析API的xml响应。以下是一个示例响应- 在iframe src中检查具有有效标记和单个参数的工作代码 我现在在想什么 现在,按照@hakre在我的- 我试过使用DOMDocument::loadHTML,但正如我预期的那样失败了。给出如下警告:警告:DOMDocument::loadHTML:标记q:响应在实体中无效,第2行 为中列出的字符转义字符串的特定部分 问题: 最后,在我的例子中,如果我必须转义字符串的某个特定部分,那么我为什么不首先查找这些分隔符并返回它们呢?那么
因此,我的问题是这个要求以及注释下面的要点-,最聪明的方法是什么?在实施标准时,可以做出许多有效的选择。但是,在违反标准时没有有效的选择。您需要向发送这些数据的人展示他们在实现XML标准时的一些有效选择 其中一个选择是将HTML内容放在CDATA中。另一种方法是对HTML进行编码 他们向您发送垃圾并称之为XML是完全不可接受的。也许他们没有意识到它不是有效的XML,但事实并非如此。如果他们不相信您,那么您应该简单地尝试在标准XML编辑器(如XMLspy)中打开XML。让他们求助于XMLspy作为第三方,它可以告诉他们自己的XML是否有效 然后,他们可以自由选择如何生成有效的XML,您需要处理他们的选择
$xml = '<?xml version="1.0"?>
<q:response xmlns:q="http://api-url">
<q:impression>
<q:content>
<html>
<meta name="HandheldFriendly" content="True">
<meta name="viewport" content="width=device-width, user-scalable=no">
<meta http-equiv="cleartype" content="on">
</head>
<body style="margin:0px;padding:0px;">
<iframe scrolling="no" src="http://api-response-url/with/lots?of=parameters&somethingmore=someval" width="320px" height="50px" style="border:none;"></iframe>
</body>
</html>
</q:content>
<q:cpc>0.02</q:cpc>
</q:impression>
</q:response>';
$dom = new DOMDocument;
$dom->loadXML($xml); // load the XML string defined above - works only if entire xml is valid
$adHtml = "";
foreach ($dom->getElementsByTagNameNS('http://api-url', '*') as $element)
{
if($element->localName == "content")
{
$children = $element->childNodes;
foreach ($children as $child)
{
$adHtml .= $child->ownerDocument->saveXML($child);
}
}
}
echo $adHtml; //Have got necessary contents here