php - 在用 PHP 创建的 iPhone 上解析 XML

标签 php iphone objective-c xml parsing

我正在尝试使用我在 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 的途中似乎有一些前导空格。我在您粘贴的代码中看不到任何可以做到这一点的内容,但是:

  1. 这是直接吐出 XML 的 PHP 脚本吗?如果是这样,您需要确保文件开头没有空格,然后再打开 <?php标签。

  2. 检查文件开头是否有伪造的 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/

相关文章:

php - Python3 日志记录 : UnicodeEncodeError: 'ascii' codec can't encode character '\u20ac' when called from apache/php

php - 向 PHP 发出 AJAX 请求时导致 500 Internal Server Error 的原因是什么?

objective-c - "if-else"具有多个 OR/Objective-C

objective-c - 知道如何在 DDTokenCache 中避免这种断言及其含义吗?

iphone - 使用 UITabBarController 时在整个屏幕上覆盖一个 View ?

php - 在 Laravel 中更新多行数据库

php - 这个脚本有多安全(强化)?

iphone - 是否可以复制 UILabel,以便我可以将其作为 subview 添加到多个 UIView 中?

ios - Parse中如何在同一行同时添加多条数据

iphone - ALAssetsLibrary 获取视频路径稍后播放