php新增xml子节点并添加属性,修改属性(方法和实例)

new SimpleXMLElement() 解析元素对象操作XML

用到的方法:

->addChild

->addAttribute

->setAttribute

->createCDATASection

例如,有一段xml代码

1.需求:在APPList节点内增加若干个子节点,并为其添加(修改)属性

$DstXML = <<<XML
			 <Data Type="CC" Idx="0" >
				<Param>
					<APPList></APPList> 
				</Param>
			</Data>
		XML;

如果节点值或属性中有中文,需要带上编码方式

//解决PHP使用new SimpleXMLElement创建节点赋值时中文问题的方法
是在创建SimpleXMLElement对象时指定编码格式为UTF-8
$DstXML = '<?xml version="1.0" encoding="UTF-8"?>
			 <Data Type="CC" Idx="0" >
				<Param>
					<APPList></APPList> 
				</Param>
			</Data>';

2.分析此时$DstXML是字符串类型,因此使用php内置方法将其转为XML对象,再获取父节点APPList,然后直接使用方法添加节点和属性,(也可以给节点添加数据)最后使用asXML()方法将xml对象转为xml文本

$dxml = new SimpleXMLElement($DstXML);

$root= $dxml->Param->APPList;

$app = $root->addChild('APP');
//也可以在新增节点的同时添加值 $app = $root->addChild('APP','data');
//或者直接给APPList节点增加值 $dxml->Param->APPList = 'data';
$app ('ID','12345678');
//修改则用setAttribute

$res = $dxml->asXML();

3.结果:

<Data Type="CC" Idx="0" >
	<Param>
		<APPList>
            <APP ID="12345678"></APP>
            //<APP>data</APP>
        </APPList> 
	</Param>
</Data>

4.延伸:如果遇到需要转义的字符,可以使用 由 "<![CDATA[" 开始,由 "]]>" 结束

 此方法不会对内容进行解析,而以原格式传输,以下为php语法做了一个封装

//创建类函数实现
class SimpleXMLExtended extends SimpleXMLElement{
			public function addCData($cdata_text){
				$node = dom_import_simplexml($this);
				$no = $node->ownerDocument;
				$node->appendChild($no->createCDATASection($cdata_text));
			}
		}
		
		$DstXML = <<<XML
			 <DstRes Type="SC" Idx="0" OptID="CTL_IA_AddPUSelfAIList">
				<Param>
					<APPList></APPList> 
				</Param>
			</DstRes>
		XML;
		
		$dxml = new SimpleXMLExtended($DstXML);
        $root = $dxml->Param->APPList;
	
		$row = new stdClass();
        $row->AI = 'duixiang';
		
		$jsonString = json_encode($row);
		$root ->addCData($jsonString);
        
        echo $dxml->asXML();
		

得到结果:

<?xml version="1.0"?>
<DstRes Type="SC" Idx="0" OptID="CTL_IA_AddPUSelfAIList">
		<Param>
			<APPList><![CDATA[{"AI":"duixiang"}]]></APPList> 
		</Param>
	</DstRes>

另一种方法解析XML文档对象,new DOMDocument(); 

$xmldoc = new DOMDocument();
$xmldoc->loadXML($XMLContent);

获取父节点->getElementsByTagName

创建子节点->createElement

创建属性名->createAttribute

节点添加属性->setAttributeNode

父节点添加子节点->appendChild

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值