【问题标题】:String replace after XMLWriter in php, before flush()在 php 中的 XMLWriter 之后,flush() 之前的字符串替换
【发布时间】:2014-02-15 20:39:46
【问题描述】:

我从一个相当长的 MySQL 语句(由于奇怪的 Prestashop 表组织,有 4 个内部连接)生成了一个非常复杂的 XML(使用 XMLWriter for PHP),我对生成的文件几乎很满意。 但是,我希望有机会在构建 XML 之后,假设在 XML->flush() 之前我可以进行一些基本的字符串查找和替换。

这可能吗?我知道 XMLWriter、XMLReader、SimpleXML,但我要问的只是在 flush() 之前在我正在构建的 XML 文件上用 PHP 进行一些字符串替换。

有什么想法吗? 谢谢 法比奥

【问题讨论】:

  • XMLWriter::outputMemory

标签: php mysql xml


【解决方案1】:

我认为有两种方法可以解决这个问题。

  1. 在致电flush 后执行查找/替换。
  2. 在您调用各种writer functions 的每个地方,通过查找/替换逻辑运行$content,然后将其传递给编写器函数。

请注意,xml 上的字符串替换可能是个坏主意,尤其是正则表达式。可能在调用 flush 之后考虑使用 xpath,或者如果您知道仅在调用 writer 之前对标签或属性名称/值的内容进行操作,那么最好在此处进行查找/替换调用。

编辑 这是一个例子。这只是一种方式,但它是一个简单的例子;看看有没有帮助。

$writer = new XMLWriter(); 

$writer->openMemory();
$writer->startDocument('1.0'); 
$writer->setIndent(4); 
$writer->startElement('rss'); 
$writer->writeAttribute('version', '2.0'); 
$writer->writeAttribute('xmlns:atom', 'http://www.w3.org/2005/Atom'); 
$writer->startElement("channel"); 
$writer->writeElement('title', 'Latest Products'); 
$writer->endElement(); 
$writer->endElement(); 
$writer->endDocument(); 

$doc = $writer->flush(); 
$doc = str_replace('Latest Products', "Nathan's Products", $doc);
echo $doc;

【讨论】:

  • 亲爱的,感谢您的宝贵时间和回复。如果我使用 outputMemory 来获取一个字符串,那么我不能修改它... $result = $xml->outputMemory(); // 或 $result = $xml->flush(); str_replace("Marocco","Marokko",$result);回显$结果;你写在flush()之后进行查找/替换,但是在哪个字符串上?我如何从 XMLWriter 中获取字符串,除非我像我展示的那样做?
  • 精彩的解释。你救了我的一天!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2012-08-29
  • 1970-01-01
  • 2016-12-08
  • 2019-08-19
相关资源
最近更新 更多