我正在尝试使用DOM / PHP将条目添加到XML文件中,但是我无法让它出现在XML文件中。
XML架构如下:
<alist>
<a>
<1>text a</1>
<2>text a</2>
</a>
<a>
<1>text b</1>
<2>text b</2>
</a>
</alist>
和PHP是:
$xmlFile = "../../data/file.xml";
$dom = DOMDocument::load($xmlFile);
$v1 = "text c";
$v2 = "text c";
//create anchor
$alist = $dom->getElementsByTagName("alist");
//create elements and contents for <1> and <2>
$a1= $dom->createElement("1");
$a1->appendChild($dom->createTextNode($v1));
$a2= $dom->createElement("2");
$a2->appendChild($dom->createTextNode($v2));
//Create element <a>, add elements <1> and <2> to it.
$a= $dom->createElement("a");
$a->appendChild($v1);
$a->appendChild($v2);
//Add element <a> to <alist>
$alist->appendChild($a);
//Append entry?
$dom->save($xmlFile);
答案 0 :(得分:1)
getElementsByTagName()
返回具有该标记名称的元素节点列表。您无法将节点附加到列表中。您只能将它们附加到列表中的元素节点。
您需要检查列表是否包含节点并阅读第一个节点。
不允许使用1
或2
等数字元素名称。数字不能是xml限定名称的第一个字符。即使将它们编号为e1, e2, ...
也是一个坏主意,它使定义变得困难。如果需要该号码,请将其放入属性值。
$xml = <<<XML
<alist>
<a>
<n1>text a</n1>
<n2>text a</n2>
</a>
<a>
<n1>text b</n1>
<n2>text b</n2>
</a>
</alist>
XML;
$dom = new DOMDocument();
$dom->preserveWhiteSpace = FALSE;
$dom->formatOutput = TRUE;
$dom->loadXml($xml);
$v1 = "text c";
$v2 = "text c";
// fetch the list
$list = $dom->getElementsByTagName("alist");
if ($list->length > 0) {
$listNode = $list->item(0);
//Create element <a>, add it to the list node.
$a = $listNode->appendChild($dom->createElement("a"));
$child = $a->appendChild($dom->createElement("n1"));
$child->appendChild($dom->createTextNode($v1));
$child = $a->appendChild($dom->createElement("n2"));
$child->appendChild($dom->createTextNode($v2));
}
echo $dom->saveXml();
<?xml version="1.0"?>
<alist>
<a>
<n1>text a</n1>
<n2>text a</n2>
</a>
<a>
<n1>text b</n1>
<n2>text b</n2>
</a>
<a>
<n1>text c</n1>
<n2>text c</n2>
</a>
</alist>