iT邦幫忙

0

PHP XML appendChild

  • 分享至 

  • xImage

XML:

<?xml version="1.0"?>
<AA>
 <Ptest>
  <test><test/>
   <test1/>
 <Ptest>
  <Ctest>
    <test><!CDATA[123]]><test/>
    <test1/>
  </Ctest>
  <Ctest>
    <test><!CDATA[123]]><test/>
    <test1/>
  </Ctest>
  <Ctest>
    <test><!CDATA[123]]><test/>
    <test1/>
  </Ctest>
</AA>

PHP:

$root = $dom->createElement('AA');
$root = $dom->appendChild($root);

$aa=[1,2,3];
$EMR= $dom->getElementsByTagName('AA')->item(0);

foreach ($aa as $key=>$value){

    $Ctest=$dom->createElement('Ctest');
    $Ctest->appendChild( $dom->createElement('test'));
    $Ctest->appendChild( $dom->createElement('test1'));
    $EMR->appendChild($Ctest);
    
    $Ctest_test=$dom->getElementsByTagName('Ctest')->item($key);

  foreach ($Ctest_test->childNodes as $index=>$node){
  //$node->ownerDocument->createCDATASection(123); 
      if ($node->nodeName=='test'){
       
      }else {
      
      }

  }
}

想請問各位大大,如果要在指定的TAG中加CDATA要怎麼append,目前卡在已經抓到指定的TAG了但不知道怎麼加入CDATA的值進去,只用nodeValue只能變成普通的字串不能變成CDATA格式的值。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-13 10:37:43
最佳解答

參考這篇
看看合不合用

如果你是要修改原有的 CDATA 值,請參考上面
如果你是要在建立 XML 時同時 新增 CDATA 值,請參考下面

<?php
$dom = new DOMDocument();
$root = $dom->createElement('AA');
$root = $dom->appendChild($root);
$xpath = new DOMXpath($dom);

$aa=[1,2,3];
$EMR= $dom->getElementsByTagName('AA')->item(0);

$Ctest=$dom->createElement('Ptest');
$Ctest->appendChild( $dom->createElement('test'));
$Ctest->appendChild( $dom->createElement('test1'));
$EMR->appendChild($Ctest);

foreach ($aa as $key=>$value){

    $Ctest=$dom->createElement('Ctest');
    $Ctest->appendChild( $dom->createElement('test'));
    $Ctest->appendChild( $dom->createElement('test1'));
    $EMR->appendChild($Ctest);
    
    $Ctest_test=$dom->getElementsByTagName('Ctest')->item($key);

	foreach ($Ctest_test->childNodes as $index=>$node){
		if ($node->nodeName=='test'){
			$ct = $node->ownerDocument->createCDATASection(123);
			$node->appendChild($ct);
		} else {      
      }
  }
}
echo $dom->saveXml();
?>

另外囉嗦一句
如果你是工作/課業上需要
才 study XML
如果只是單純的「學習」
那你可以不用再花時間在這上面
因為已經很少系統在使用 XML 了
連聽過的人都不多了

qpalzm iT邦研究生 5 級 ‧ 2021-12-13 10:42:54 檢舉

想請問海綿寶大大,如果直接抓$dom->getElementsByTagName('test')->item($key);
會連Ptest中的一起包含道,有沒有甚麼方法可以讓我只取Ctest中的讓我append?

用 XPath 可精準定位

qpalzm iT邦研究生 5 級 ‧ 2021-12-13 11:58:12 檢舉

好的~謝謝海綿大~

我要發表回答

立即登入回答