标题基本概括了所有内容.
如果我有类似的东西(从PHP站点示例):
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies></movies>
XML;
$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type', 'documentary');
$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');
$characters = $movie->addChild('characters');
$character = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');
$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');
echo("<pre>".htmlspecialchars($sxe->asXML())."</pre>");
die();
Run Code Online (Sandbox Code Playgroud)
我最终输出一个长字符串,如下所示:
<?xml version="1.0" standalone="yes"?>
<movies type="documentary"><movie><title>PHP2: More Parser Stories</title><plot>This is all about the people who make it work.</plot><characters><character><name>Mr. Parser</name><actor>John Doe</actor></character></characters><rating type="stars">5</rating></movie></movies>
Run Code Online (Sandbox Code Playgroud)
这对于程序使用者来说很好,但是对于调试/人工任务,有没有人知道如何将它变成一个漂亮的缩进格式?
我有一些返回的XML块DOMDocument::saveXML().它已经非常缩进,每个级别有两个空格,如下所示:
<?xml version="1.0"?>
<root>
<error>
<a>eee</a>
<b>sd</b>
</error>
</root>
Run Code Online (Sandbox Code Playgroud)
由于无法配置DOMDocument(AFAIK)缩进字符,我认为可以运行正则表达式并通过将所有两个空格对替换为制表符来更改缩进.这可以通过回调函数(Demo)来完成:
$xml_string = $doc->saveXML();
function callback($m)
{
$spaces = strlen($m[0]);
$tabs = $spaces / 2;
return str_repeat("\t", $tabs);
}
$xml_string = preg_replace_callback('/^(?:[ ]{2})+/um', 'callback', $xml_string);
Run Code Online (Sandbox Code Playgroud)
我现在想知道是否有可能做这个没有回调函数(并且没有e-modifier(EVAL)).有想法的任何正则表达式向导?
我正在尝试在php中调试一个大而复杂的DOMDocument对象.理想情况下,如果我能让DOMDocument以类似数组的格式输出,那就太好了.
DOM文档:
$dom = new DOMDocument();
$dom->loadHTML("<html><body><p>Hello World</p></body></html>");
var_dump($dom); //or something equivalent
这输出
DOMDocument Object ( )
而我希望它输出
DOMDocument: html =>body ==>p ===>Hello World
或类似的东西.为什么没有方便的调试或输出?!?
当您查看源代码时,我的 HTML 如下所示:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是在我这样做之后:
$dom = new DOMDocument();
$dom->loadHTML($html);
$dom->saveHTML();
Run Code Online (Sandbox Code Playgroud)
我的源代码变成了这样:
<!DOCTYPE html><html><head></head><body></body></html>
Run Code Online (Sandbox Code Playgroud)
使用 PHP DOMDocument() 类及其方法时如何保留新行和空格?
所以我想说我要比较两个DOMDocument对象.它们具有相同的内容,但订单和格式可能会关闭.例如,第一个输出此XML:
<responses>
<response id="12">
<foo>bar</foo>
<lorem>ipsum</lorem>
<sit>dolor</sit>
</response></responses>
Run Code Online (Sandbox Code Playgroud)
其他一项产出:
<responses>
<response id="12">
<lorem>ipsum</lorem><sit>dolor</sit>
<foo>bar</foo>
</response>
</responses>
Run Code Online (Sandbox Code Playgroud)
如您所见,它们包含相同的XML结构,但某些元素的顺序可能不同,格式完全是随机的.
如果我做:
$this->assertEquals();
Run Code Online (Sandbox Code Playgroud)
测试当然会失败.我不想只测试XML结构,还要测试内容.
有任何想法吗?
假设您从 API 调用中得到以下响应:
[OrderArray] => SimpleXMLElement Object
(
[Order] => Array
(
[0] => SimpleXMLElement Object
(
[OrderID] => etc...etc..<br>
Run Code Online (Sandbox Code Playgroud)
我该如何将其转换回格式良好的 XML,以便我可以将每个订单数组保存到它们自己的单独文件中?(请不要问我为什么要执行这个看似徒劳的任务。)
所以我编写了这个脚本,在XML文件中查找某些节点,将其删除,并在其中放置一个新节点......但是,新节点如下所示:
<PrintQuestion id="17767" type="pickOne">
<Standards><Standard value="CA.MATH-6-6-20" state="CA" grade="3" subject="MATH"/></Standards><References>
<PassageRef id="1892"/>
</References>
Run Code Online (Sandbox Code Playgroud)
我试图使用$ xml-> formatOutput = true; 但这没有做任何事情.我正在从XML文件加载dom对象并在完成后将其保存回同一文件.
可能的重复:
PHP XML 如何输出好的格式
我有以下以动态方式创建 XML 文档的 PHP DOM 代码:
<?php
// create doctype
$dom = new DOMDocument("1.0");
// display document in browser as plain text
// for readability purposes
header("Content-Type: text/plain");
for ($i=1;$i<=5;$i++)
{
// create root element
$root = $dom->createElement("toppings");
$dom->appendChild($root);
// create child element
$item = $dom->createElement("item");
$root->appendChild($item);
// create text node
$text = $dom->createTextNode("pepperoni");
$item->appendChild($text);
}
// save and display tree
echo $dom->saveXML();
?>
Run Code Online (Sandbox Code Playgroud)
PHP 代码生成下一个 XML 代码:
<?xml version="1.0"?>
<toppings><item>pepperoni</item></toppings>
<toppings><item>pepperoni</item></toppings>
<toppings><item>pepperoni</item></toppings>
<toppings><item>pepperoni</item></toppings>
<toppings><item>pepperoni</item></toppings>
Run Code Online (Sandbox Code Playgroud)
我想知道要更改什么才能使 …