我正在尝试使用我在 PHP 中创建的 NSXMLParser 来解析 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 有什么问题,我正确地收到了它,如下所示 This removes the\n ....
我尝试调试,但在使用 [parser parse] 启动解析器后,没有调用任何委托(delegate)函数(是的,我设置了委托(delegate))除了 parserError。 由于xml前后仍有空格可能是这个原因,但我无法将它们取出。 在我在 iPhone 上的应用程序中,我尝试了不同的编码,UTF8 和 ASCII。 我还尝试将接收到的数据转换为字符串,称为
stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet
并转换回来。
我还设置了以下内容:
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
我不知道我做错了什么,请帮忙。
提前致谢。
最佳答案
在通往 NSXMLParser 的途中似乎有一些前导空格。我在您粘贴的代码中看不到任何可以做到这一点的内容,但是:
这是直接吐出 XML 的 PHP 脚本吗?如果是这样,您需要确保文件开头没有空格,然后再打开
<?php
标签。检查文件开头是否有伪造的 UTF-8“faux-BOM”。
无论如何,最简单的方法可能是完全放弃 XML 声明。只要您使用 XML 1.0 和 UTF-8(而且您几乎总是会使用),XML 声明就没有任何用处。如果没有声明,您的文档可以在开头添加空格,同时仍然是格式正确的。
你应该能够通过传递 LIBXML_NOXMLDECL
来做到这一点saveXML
的选项,但我认为目前行不通。您可以改为调用 saveXML
对于每个文档的 childNodes
并加入生成的字符串。或者,在您想要保留的根元素之外没有任何注释或处理指令的常见情况下,您可以简单地说:
$xml_string = $doc->saveXML($doc->documentElement);
关于php - 在用 PHP 创建的 iPhone 上解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2332960/