我目前正在尝试构建的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查看元素是否存在,如果是,则将子元素添加到其中。我明白这里有些东西需要改变。目前是否有办法明确说明要添加的子项应该转到第二个元素,而不是第一个具有相同名称的元素?如果没有,最好的解决方法是什么,可以添加命名空间没有问题吗?
谢谢,