gpt4 book ai didi

php - 使用 XMLWriter 生成 XML 文件

转载 作者:行者123 更新时间:2023-12-02 20:50:12 25 4
gpt4 key购买 nike

我正在尝试通过以下循环创建一个包含人员及其 child 姓名的 XML 文件:

$xml_file = new XMLWriter();

$xml_file->startElement("People");

while ($list_of_people->current != NULL ){

$xml_file->writeElement("Person"); // create a new person

$xml_file->startElement('Person');

$xml_file->writeAttribute('name', $list_of_people->current->name); // add their name as an attribute

if ($list_of_people->current->children != NULL){

while ($list_of_people->current->child_current != NULL){ // if they have children create them as well

$xml_file->writeElement("Person");

$list_of_people->startElement('Person');

$xml_file->writeAttribute('name', $list_of_people->current->child_current->child_name);

$xml_file->endElement();

$list_of_people->current->child_current = $list_of_people->current->child_current->next;
}
}

$xml_file->endElement();

$list_of_people->current = $list_of_people->current->next;
}

如您所见,在输出文件中,我应该有多个名为“Person”的元素,具体取决于列表中有多少人以及其中有多少人有 child 。

我希望最终的 XML 文档看起来像这样:

<People>
<Person name="Anna"></Person>
<Person name="Joe">
<Person name="Willy"></Person> // Joe has a child named Willy
</Person>
<Person name="Rob"></Person>
</People>

现在,我关心的是,我怎么知道 $xml_file->startElement('Person');选择了我刚刚创建的当前人员,而不是之前已创建的任何人员元素,因为它们的名称都相同?

如果最终 XML 文件的各个元素具有相同的名称,如何访问它们?

最后,我想保存这个 XML 文档并将其内容打印到标准输出。

谢谢!

最佳答案

startElement 方法不会选择当前人员,而是启动另一个人员。事实上,您可以使用 writeElement 或 startElement 添加元素,但无需同时使用两者。

请参阅此示例:

<?php
$people = array(
array('name' => 'Anne', 'children' => array()),
array('name' => 'Joe', 'children' => array(array('name' => 'Willy')))
);

//create a new xmlwriter object
$xml = new XMLWriter();

// Used to write to xml file - uncomment the next line to print xml to a file
// $xml->openURI('people_test.xml');

// used for string output from memory
$xml->openMemory(); // comment this line to print xml to a file

//set the indentation to true
$xml->setIndent(true);

//create the document tag
$xml->startDocument();

$xml->startElement("People"); // start People

foreach($people as $person) {

$xml->startElement("Person"); // start Person
$xml->writeAttribute('name', $person['name']);

if(!empty($person['children'])) {
foreach($person['children'] as $child) {
$xml->startElement("Person"); // start Person
$xml->writeAttribute('name', $child['name']);
$xml->endElement();
}
}
$xml->endElement(); //End Personn

}

$xml->endElement(); //End People

// Display thue current buffer
echo $xml->flush();


?>

关于php - 使用 XMLWriter 生成 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42487080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com