在php中创建了一个DOMDocument,它具有相同名称的子项

时间:2016-11-02 13:08:58

标签: php xml domdocument

我目前正在尝试构建的XML需要有两个<Location>个元素,一个用于原点,一个用于目标,在同一个父元素中找到。我追加第一个孩子没有问题,但第二个孩子的元素最终会在第一个孩子身上。

正在使用辅助函数创建DOMDocument,该函数除了当前节点/子节点的数据。

public function set_data(Array $data, $root = null){
    //Check if element exists
    $dom = ($root === null)? $dom = $this->xml : $this->xml->getElementsByTagName($root)->item(0); 

    //Create the element
    $element = ( ! empty( $data['value'] ) ) ? $this->xml->createElement( $data['element'], $data['value'] ): $this->xml->createElement( $data['element']);

    //Add any attributes
    if ( !empty( $data['attributes'] ) && is_array( $data['attributes'] )  ) {
        foreach ( $data['attributes'] as $attribute_key =>  $attribute_value ) {
            $element->setAttribute( $attribute_key, $attribute_value );
        }
    }
    $dom->appendChild($element);

    //add children
    foreach ( $data as $data_key => $child_data ) {
        if(is_array($child_data) && is_numeric($data_key)){
            $this->set_data($child_data, $data['element']);
        }
    }
    return true;
}

输入示例:

array('element' => 'ShipmentLocations', 
    array('element' => 'Location',
        array('element' => 'LocationType', 'value' => 'Origin'),
        array('element' => 'HasLoadingDock', 'value' => 'false')
    ),
    array('element' => 'Location',
        array('element' => 'LocationType', 'value' => 'Destination'),
        array('element' => 'HasLoadingDock', 'value' => 'true')
    )
)...

此函数使用getElementsByTagName查看元素是否存在,如果是,则将子元素添加到其中。我明白这里有些东西需要改变。目前是否有办法明确说明要添加的子项应该转到第二个元素,而不是第一个具有相同名称的元素?如果没有,最好的解决方法是什么,可以添加命名空间没有问题吗?

谢谢,

0 个答案:

没有答案