2016-07-26 3 views
1

私はXMLファイルを作成して保存するには、DOMDocumentを使用します。 はここPHP XMLネストしたノードを作成するには?

$doc = new DOMDocument(); 
$document = $doc->createElement('DOCUMENT'); 
$document->nodeValue = ''; 
$doc->appendChild($document); 

$order = $doc->createElement('ORDER'); 
$order->nodeValue = ''; 
$doc->appendChild($order); 

$ele = $doc->createElement('Reportvariable1'); 
$ele->nodeValue = ''; 
$doc->appendChild($ele); 

$ele = $doc->createElement('Reportvariable1'); 
$ele->nodeValue = ''; 
$doc->appendChild($ele); 

$ele = $doc->createElement('Reportvariable1'); 
$ele->nodeValue = ''; 
$doc->appendChild($ele); 

$ele = $doc->createElement('Reportvariable1'); 
$ele->nodeValue = ''; 
$doc->appendChild($ele); 

$doc->appendChild($ele); 
$doc->save('order_xml/Order_.xml'); 

その出力は、このような単純である私のコードです:

<?xml version="1.0"?> 
<DOCUMENT></DOCUMENT> 
<ORDER></ORDER> 
<Reportvariable1></Reportvariable1> 
<Reportvariable1></Reportvariable1> 
<Reportvariable1></Reportvariable1> 
<Reportvariable1></Reportvariable1> 

私はこのようなネストされたノードを作成するにはどうすればよいですか?

<?xml version="1.0"?> 
<DOCUMENT> 
    <ORDER> 
     <Reportvariable1></Reportvariable1> 
     <Reportvariable1></Reportvariable1> 
     <Reportvariable1></Reportvariable1> 
     <Reportvariable1></Reportvariable1> 
    </ORDER> 
</DOCUMENT> 

答えて

1

を取得します。

  1. 文書オブジェクトのメソッド
  2. 親(文書または要素)にappendChild()を使用してノードを追加を使用してノードを作成
  3. 必要に応じて要素ノードの属性を設定します。

appendChild()ノードを返します。したがって、create*コールをネストすることができます。

DOMElement::$nodeValueを設定しないでください。特別なエスケープが必要です。テキストノードを作成して追加する方がはるかに安全です。

$dom = new DOMDocument(); 
$document = $dom->appendChild(
    $dom->createElement('DOCUMENT') 
); 
$order = $document->appendChild(
    $dom->createElement('ORDER') 
); 
for ($i = 1; $i < 5; $i++) { 
    $reportVariable = $order->appendChild(
    $dom->createElement('Reportvariable1') 
); 
    // add some text content 
    $reportVariable->appendChild(
    $dom->createTextNode('some text content' . $i) 
); 
} 
$dom->formatOutput = true; 
echo $dom->saveXml(); 

出力:

<?xml version="1.0"?> 
<DOCUMENT> 
    <ORDER> 
    <Reportvariable1>some text content1</Reportvariable1> 
    <Reportvariable1>some text content2</Reportvariable1> 
    <Reportvariable1>some text content3</Reportvariable1> 
    <Reportvariable1>some text content4</Reportvariable1> 
    </ORDER> 
</DOCUMENT> 
素晴らしい作品
+0

はい、これは私が欲しいものです。 :) –

2

変更コードはに: -

$doc = new DOMDocument(); 
    $document = $doc->createElement('DOCUMENT');$document->nodeValue = '';$doc->appendChild($document); 
    $order = $doc->createElement('ORDER');$order->nodeValue = '';$document->appendChild($order); 

    $ele = $doc->createElement('Reportvariable1');$ele->nodeValue = '';$order->appendChild($ele); 
    $ele = $doc->createElement('Reportvariable1');$ele->nodeValue = '';$order->appendChild($ele); 
    $ele = $doc->createElement('Reportvariable1');$ele->nodeValue = '';$order->appendChild($ele); 
    $ele = $doc->createElement('Reportvariable1');$ele->nodeValue = '';$order->appendChild($ele); 
    $doc->save('order_xml/Order_.xml'); 

あなたがDOMに新しいノードを追加するには、3つの手順を使用して所望の出力

+0

。 しかし、それは単線で、どのように私はラインを壊すことができますか? –

+0

それぞれの後にEnterキーを押します。また、あなたのために私の答えを正しいとマークすることもできます.... :) – Webdev

+0

正しい答えとして私の答えをマークすることもできますか? – Webdev

関連する問題