Я создаю xml-файл, как показано ниже, может ли кто-нибудь помочь, как получить это с помощью php?
Файл xml:
<products> <product id="123" /> </products>
Файл Php:
Я использую следующий код, но не получаю результат, как указано выше
$xml = new DomDocument('1.0', 'utf-8'); $xml->formatOutput = true; $products= $xml->createElement('products'); $product = $xml->createElement('product'); $id = $xml->createElement('id'); $xml->appendChild($products); $products->appendChild($product); $product->appendChild($id); $id->nodeValue = 123; $xml->save("data.xml");
получение данных xml:
$xml = new DomDocument(); $xmlFile = "data.xml"; $xml= DOMDocument::load($xmlFile); $product = $xml->getElementsByTagName("product"); foreach($product as $node) { $address = $node->getElementsByAttributeName("address"); $address = $address->item(0)->nodeValue; echo"$address"; }
Вы не получаете желаемых результатов, потому что добавляете id
как тег, а не атрибут. Я немного переработал ваш код и сделал id
атрибутом. Я проверил код ниже, и он дает желаемый результат.
<?php $xml = new DomDocument('1.0', 'utf-8'); $xml->formatOutput = true; $products= $xml->createElement('products'); $product = $xml->createElement('product'); $xml->appendChild($products); $products->appendChild($product); $product->appendChild(new DomAttr('id', '123')); $xml->save("data.xml"); ?>
Если id
должен быть атрибутом, вам необходимо использовать метод DOMElement::setAttribute()
. Я думаю, что это сработает – согласно документации , если атрибут еще не существует, он будет создан.
$product->setAttribute("id", "123");
Затем loas $product->appendChild( $id );