将XML元素转换为数组

3

我有一些简单的XML,希望能在PHP中将其解析为数组,以便构建一些动态SQL插入语句。

示例XML:

<Data>
    <Key>1</Key>
    <Column>Value 1</Column>
    <Column2>Value 2</Column>
</Data>

数据将通过http POST传递给PHP。

最简单的方法是什么?应该始终存在一个实例,但希望从一个POST中获取多个实例的选项。

我可以构建一些代码来解析特定的PHP,但我想使用单个代码片段动态处理数据,以便可以用它来创建多个表的插入。

2个回答

4

好的,假设您想要一个结果

array(
    1 => array(
        'Value 1',
        'Value 2',
    )
)

假设一个结构为

<root>
    <Data>
        <!-- key and column entities -->
    </Data>
    <Data>
        <!-- key and column entities -->
    </Data>
    <Data>
        <!-- key and column entities -->
    </Data>
</root>

你可以像这样做(我更喜欢使用DomDocument):
$dom = new DomDocument();
$dom->loadXml($xmlString);
$dataElements = $dom->getElementsByTagName('Data');
$array = array();
foreach ($dataElements as $element) {
    $subarray = array();
    foreach ($element->childNodes as $node) {
        if (!$node instanceof DomElement) {
            continue;
        }
        $key = $node->tagName;
        $value = $node->textContent;
        $subarray[$key] = $value;
    }
    $array[] = $subarray;
}

通过那个编辑,它会变成:

<root>
    <Data>
        <Key>4</Key>
        <Foo>Bar</Foo>
    </Data>
    <Data>
        <Key>6</Key>
        <Bar>Baz</Bar>
    </Data>
</root>

进入:

array(
    array(
        'Key' => 4,
        'Foo' => 'Bar',
    ),
    array(
        'Key' => 6,
        'Bar' => 'Baz',
    ),
)

我的目标是不必硬编码Key、Column和Column2——格式可以是<root><data>...</data><data>...</data></root>,但是data内部的内容将是可变的。我想我只是在寻找一个函数,它将返回<data>内所有元素名称,以便我可以提取该元素的值。我已经尝试了简单的XML,使用以下代码:$xmlstr = "<Data><Key>1</Key><Column>AAA</Column></Data>";$sxe = new SimpleXMLElement($xmlstr);echo $sxe->getName() . "\n";foreach ($sxe->children() as $child) { echo $child->getName() . "\n"; }但它返回:Data Key Column - andyknas
这不是你想要它返回的吗?我不明白你想要实现什么...如果你只想要标签的名称,我会在我的答案中进行编辑... - ircmaxell

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接