我将尝试使用NSXMLParser解析一个由PHP创建的XML字符串。我的PHP脚本如下:
$doc = new DomDocument('1.0');
//$doc->preserveWhiteSpace=false;
$root = $doc->createElement("root");
$root = $doc->appendChild($root);
$child = $doc->createElement("child");
$child = $root->appendChild($child);
$value = $doc->createTextNode("testvar");
$value = $child->appendChild($value);
$xml_string = $doc->saveXML();
print $xml_string;
如果我在浏览器中打开该页面,它会像应该的那样显示“testvar”。 查看源代码时,发现存在几个空格:
begin ->| <?xml version="1.0"?>
<root><child>testvar</child></root>
|<--end
将preserveWhitespace设置为false不会改变任何内容。 因此,我尝试使用php中的正则表达式:
$xml_string1 = preg_replace("/\s+</","<",$xml_string);
$xml_string2 = preg_replace("/>\s+/",">",$xml_string1);
print $xml_string2;
这将删除 \n 并将我带到这里
begin-->| <?xml version="1.0"?><root><child>testvar</child></root> |<--end
在浏览器中,它总是显示所需的结果:testvar。
在iPhone上,我收到以下错误:
**NSXMLParserErrorDomain Code = 64, Operation could not be completed.**
我不知道XML的问题在哪里,我正确地接收到了它,如下所示:这将删除\n....
我尝试进行调试,但在使用[parser parse]启动解析器后,除了parserError之外,没有任何委托函数被调用(是的,我设置了委托)。由于仍然存在xml前后的空格,可能是原因之一,但我无法将它们去掉。在iPhone应用程序中,我尝试了不同的编码,UTF8和ASCII。我还尝试将接收到的数据转换为字符串,称之为
stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet
并转换回去。
我还设置了以下内容:
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
我不知道我做错了什么,请帮助我。
提前致谢。