【发布时间】:2008-09-26 13:57:03
【问题描述】:
我通常会这样手写 xml:
<tag><?= $value ?></tag>
找到了诸如 simpleXML 之类的工具,我应该改用这些工具吗?使用这样的工具这样做有什么好处?
【问题讨论】:
标签: php xml language-agnostic
我通常会这样手写 xml:
<tag><?= $value ?></tag>
找到了诸如 simpleXML 之类的工具,我应该改用这些工具吗?使用这样的工具这样做有什么好处?
【问题讨论】:
标签: php xml language-agnostic
良好的 XML 工具将确保生成的 XML 文件根据您正在使用的 DTD 正确验证。
优秀的 XML 工具还可以节省大量重复输入的标签。
【讨论】:
如果您正在处理一小部分 XML,那么手动处理几乎没有什么坏处(只要您可以避免拼写错误)。但是,对于较大的文档,您通常最好使用编辑器,它可以根据架构验证您的文档并防止拼写错误。
【讨论】:
您可以使用DOM extenstion,这对于编写代码可能非常麻烦。我个人的看法是,从头开始编写 XML 文档最有效的方法是 PHP 附带的 XMLWriter extension,并且在最近的版本中默认启用。
$w=new XMLWriter();
$w->openMemory();
$w->startDocument('1.0','UTF-8');
$w->startElement("root");
$w->writeAttribute("ah", "OK");
$w->text('Wow, it works!');
$w->endElement();
echo htmlentities($w->outputMemory(true));
【讨论】:
使用良好的 XML 生成器将大大减少由于粗心大意、注意力不集中或其他任何人类弱点而导致的潜在错误。但是,有几种不同级别的机器辅助可供选择:
至少,使用程序员的文本编辑器进行语法高亮和自动缩进。只是注意到您的文本与您预期的颜色不同,或者没有按照您预期的方式排列,可能会提示您可能错过的错字。
更好的是,退后一步,将 XML 编写为您喜欢的任何语言的数据结构,而不是将该数据结构转换为 XML。 Perl 为您提供模块,例如用于小型工作的轻量级XML::Simple 或更重的XML::Generator;使用XML::Simple 只是将您的内容安排成标准的 Perl 哈希值并通过适当的方法运行它。
-史蒂夫
【讨论】:
通过任何类型的字符串操作生成 XML 都会为代码中的错误打开大门。例如,如果 $value 包含 & 符号,您发布的极其简单的示例将不会生成格式良好的 XML。
XML 中的边缘情况并不多,但有足够的时间编写自己的代码来处理它们是浪费时间。 (如果你不处理它们,你的代码总有一天会意外失败。没人想要那样。)任何好的 XML 工具都会自动处理这些情况。
【讨论】:
使用生成器。
使用生成器的优点是您可以使用一致的标记,并且不会冒着用括号或引号插入粗手指或忘记编码某些内容的风险。这一点至关重要,因为这些错误要到运行时才会被发现,除非您有重要的测试来确保否则。
【讨论】:
手写并不总是最佳实践,因为在大型 XML 中,您可能会编写错误的标签,并且很难找到错误的原因。所以我建议使用 XMl 解析器来创建 XML 文件。
【讨论】:
速度可能是个问题...手写会快很多。
【讨论】:
eclipse 中的 XML 工具也非常有用。只需创建一个新的 xml 模式和文档,您就可以轻松使用大多数图形工具。我想指出的是,事先了解模式的工作原理会很有用。
【讨论】:
始终使用某种工具。 XML 可能非常复杂,我知道 PHP 人员习惯于使用 hackey 的小东西,但如果有人不使用 System.XML 创建 XML,它在 .NET 世界中会产生巨大的代码气味。
【讨论】: