【发布时间】:2018-01-22 19:13:28
【问题描述】:
已编辑
我正在尝试将表单输入放入 xml 文件中。
搜索on this site I've found the following code,我用它来解析 $_POST 内容。
经过几次尝试,我意识到“数字标签”(由非关联数组产生)可能是我失败的原因,所以我修改了代码如下:
function array_to_xml(array $arr, SimpleXMLElement $xml, $NumK = false)
{
foreach ($arr as $k => $v) {
if (is_array($v)){
preg_match('/^0|[1-9]\d*$/', implode(array_keys($v)))
? array_to_xml($v, $xml->addChild($k), true)
: array_to_xml($v, $xml->addChild($k));
}else{
$NumK
? $xml->addChild('_'.$k.'_', $v)
: $xml->addChild($k, $v);
}
}
return $xml;
}
无论如何,我仍在与 xpath 命令“战斗”,因为我无法找到需要转换为重复标签的某些节点(来自非关联数组)的 GrandParent。
这就是我要遵循的逻辑:
1st - 查找要重新格式化的节点(唯一具有数字标签的节点);
第二 - 找到祖父母(我需要重复的标签);
第三 - 用每组孙子(每个孩子一个)的祖父母标签替换祖父母(和他的后代)。
到目前为止,由于 xpath 的误解,我仍然停留在第一步。
下面,我拥有的结果 xml 以及我将如何对其进行转换:
我的数组是这样的:
$TestArr = Array
("First" => array
("Martha" => "Text01"
,
"Lucy" => "Text02"
,
"Bob" => array
("Jhon" => array
("01", "02")
),
"Frank" => "One"
,
"Jessy" => "Two"
)
,
"Second" => array
("Mary" => array
("Jhon" => array
("03", "04")
,
"Frank" => array
("Three", "Four")
,
"Jessy" => array
("J3", "J4")
)
)
);
使用函数array_to_xml($TestArr, new SimpleXMLElement('<root/>')) 我得到一个类似的xml:
<root>
<First>
<Martha>Text01</Martha>
<Lucy>Text02</Lucy>
<Bob>
<Jhon>
<_0_>01</_0_>
<_1_>02</_1_>
</Jhon>
</Bob>
<Frank>One</Frank>
<Jessy>Two</Jessy>
</First>
<Second>
<Mary>
<Jhon>
<_0_>03</_0_>
<_1_>04</_1_>
</Jhon>
<Frank>
<_0_>Three</_0_>
<_1_>Four</_1_>
</Frank>
<Jessy>
<_0_>J3</_0_>
<_1_>J4</_1_>
</Jessy>
</Mary>
</Second>
</root>
我需要的结果是这样的:
<root>
<First>
<Martha>Text01</Martha>
<Lucy>Text02</Lucy>
<Bob>
<Jhon>01</Jhon>
</Bob>
<Bob>
<Jhon>02</Jhon>
</Bob>
<Frank>One</Frank>
<Jessy>Two</Jessy>
</First>
<Second>
<Mary>
<Jhon>03</Jhon>
<Frank>Three</Frank>
<Jessy>J3</Jessy>
</Mary>
<Mary>
<Jhon>04</Jhon>
<Frank>Four</Frank>
<Jessy>J4</Jessy>
</Mary>
</Second>
</root>
【问题讨论】:
-
你试过了吗? pastebin.com/pYuXQWee
-
@DanielO。抱歉:结果相同
-
那么 JSON,为什么是 XML?
-
@DanielO。因为目标是在 xml 中插入一些数据并使用特定的架构发送它(我的意思是 xml 的结构)
-
好的,可以手动生成XML吗?
标签: php xml parsing multidimensional-array