现在试图解决这个问题,但现在运气好了,例如我有一个像这样的外部xml文档:
<?xml version="1.0" ?>
<template>
<name>My Template Name</name>
<author>John Doe</author>
<positions>
<position>top-a</position>
<position>top-b</position>
<position>sidebar-a</position>
<position>footer-a</position>
</positions>
</template>
如何处理此文档以创建如下变量:
$top-a = top-a;
$top-b = top-b;
$sidebar-a = sidebar-a;
$footer-a = footer-a
如果你不能将它们变成变量,你会如何将它们放入数组?
非常感谢任何帮助。
答案 0 :(得分:1)
来自http://www.php.net/manual/en/function.xml-parse.php的PHP网站:
Ashok dot 893 at gmail dot com 26-Apr-2010 05:52 这是将所有适用对象转换为关联数组的非常简单的方法。这不仅适用于SimpleXML,也适用于任何类型的对象。输入可以是数组或对象。此函数还将options参数作为要在返回数组中排除的索引数组。请记住,由于使用了函数get_object_vars(),因此只返回对象的非静态和可访问变量数组。
<?php
function objectsIntoArray($arrObjData, $arrSkipIndices = array())
{
$arrData = array();
// if input is object, convert into array
if (is_object($arrObjData)) {
$arrObjData = get_object_vars($arrObjData);
}
if (is_array($arrObjData)) {
foreach ($arrObjData as $index => $value) {
if (is_object($value) || is_array($value)) {
$value = objectsIntoArray($value, $arrSkipIndices); // recursive call
}
if (in_array($index, $arrSkipIndices)) {
continue;
}
$arrData[$index] = $value;
}
}
return $arrData;
}
?>
Usage:
<?php
$xmlUrl = "feed.xml"; // XML feed file/URL
$xmlStr = file_get_contents($xmlUrl);
$xmlObj = simplexml_load_string($xmlStr);
$arrXml = objectsIntoArray($xmlObj);
print_r($arrXml);
?>
这将得到以下结果:
Array
(
[name] => My Template Name
[author] => John Doe
[positions] => Array
(
[position] => Array
(
[0] => top-a
[1] => top-b
[2] => sidebar-a
[3] => footer-a
)
)
)
答案 1 :(得分:0)
您想要内置的课程Simplexml
答案 2 :(得分:0)
看看SimpleXML:
http://www.php.net/manual/en/simplexml.examples-basic.php
它将XML解析为“类似地图”的结构,然后您可以使用该结构来访问您的内容。对于您的具体情况,
$xml = new SimpleXMLElement($xmlstr);
$top_a = $xml->template->positions[0]
答案 3 :(得分:0)
最简单的方法是使用SimpleXML:
$xml = simplexml_load_string(... your xml here...);
$values = array()
foreach($xml->positions as $pos) {
$values[$pos] = $pos;
}
您不希望以您建议的方式自动创建变量 - 它会使用垃圾填充您的变量名称空间。考虑如果某人发送了一个包含<position>_SERVER</position>
的XML片段并且您创建了该名称的变量的情况会发生什么 - 那就是你的$ _SERVER超全局。
答案 4 :(得分:0)
使用SimpleXML将文件解析为对象/数组结构,然后只需使用list
:
$sxml = new SimpleXMLElement($xml);
$positions = (array)$sxml->positions->children();
list($top_a, $top_b, $sidebar_a, $footer_a) = $positions['position'];
答案 5 :(得分:0)
为什么不直接做数组?
var positions = document.getElementsByTagName("positions");
var positions_final_arr = [];
for(int i = 0; i < positions.length; i++){
positions_final_arr[i] = [];
var inner_pos = positions[i].getElementsbyTagName("position");
for(int l = 0; l < inner_pos.length; l++){
positions_final_arr[i][l] = inner_pos[i].value;
}
}
console.log(positions_final_arr);
答案 6 :(得分:0)
$str = "your xml";
$xml = simplexml_load_string($str);
$result = array();
foreach ($xml->positions as $pos) {
foreach ($pos->position as $p) {
$element = (string)$p[0];
$result[$element] = $element;
}
}
var_dump($result);
答案 7 :(得分:0)
$dom = new DOMDocument;
$dom->loadXML('<root><position>a</position></root>'); //your string here
//$dom->loadXML(file_get_contents($file_with_pxml)); - from file
$position = $dom->getElementsByTagName('position');
for ($i=0; $i<$position->length; $i++)
{
$item = $position->item($i);
${$item->nodeValue} = $item->nodeValue;//$$item->nodeValue = $item->nodeValue;
}
但据我所知 - 您无法在PHP中使用破折号创建变量
答案 8 :(得分:0)
<?php
$xmlUrl = "feed.xml"; // XML feed file/URL
$xmlStr = file_get_contents($xmlUrl);
$xmlObj = simplexml_load_string($xmlStr);
$arrXml = json_decode(json_encode($xmlObj), true); # the magic!!!
print_r($arrXml);
?>
这将得到以下结果:
Array
(
[name] => My Template Name
[author] => John Doe
[positions] => Array
(
[position] => Array
(
[0] => top-a
[1] => top-b
[2] => sidebar-a
[3] => footer-a
)
)
)