使用PHP添加/编辑XML文件的标签

时间:2012-05-17 16:00:38

标签: php xml

我有一个xml文件,我想创建一个表单/表来使用PHP添加,编辑和删除记录。

有什么方法可以创建一个显示所有结果的表,并允许我编辑或删除表中特定行,表示XML文件中的完整记录?

我希望能够使用我的网络浏览器添加/编辑/删除标签,而无需在PC上编辑xml文件并上传到FTP ..

我需要用PHP,javascript或其他任何方式完成此操作。

  

请不要给我simpleXML的链接因为我试过这个并且我没有让它工作:(

如果有人可以帮助我,我将不胜感激! 谢谢!

我的xml文件(scores.xml)看起来像这样:

<Games>
<Game>
<Header> </Header>
<Row>B</Row>
<Date>07.10.2011 01:05</Date>
<Time>Finished</Time>
<HomeTeam>Team1</HomeTeam>
<Score>1 - 3</Score>
<AwayTeam>Team2</AwayTeam>
<InfoID>info2</InfoID>
<InfoData> </InfoData>
<Other> </Other>
</Game>
</Games>

2 个答案:

答案 0 :(得分:1)

您可能没有正确使用SimpleXML库。如果您尝试将内容添加到Game-&gt;其他(当前为空)

,请使用此简单示例
$xml = <<<XML
<Games>
<Game>
<Header> </Header>
<Row>B</Row>
<Date>07.10.2011 01:05</Date>
<Time>Finished</Time>
<HomeTeam>Team1</HomeTeam>
<Score>1 - 3</Score>
<AwayTeam>Team2</AwayTeam>
<InfoID>info2</InfoID>
<InfoData> </InfoData>
<Other> </Other>
</Game>
</Games>
XML;

// first convert the existing XML into a SimpleXML Object
$xmlObj = new SimpleXMLElement($xml);
echo "<pre>".print_r($xmlObj, true)."</pre>";

// update Other
$xmlObj->Game->Other = "lolz";
echo "<pre>".print_r($xmlObj, true)."</pre>";

// return as XML
$xml = $xmlObj->asXML();
echo "<pre>$xml</pre>\n";

$ xml中的内容现在是完全最新的XML。现在,如果您有多个游戏,则需要通过以下操作迭代游戏节点:

foreach($xmlObj->Game as $game) $game->Other = "Lolz";

这将使用文本Lolz更新每个游戏的其他标签。显然,这不是非常有用,但您可以确保通过分配某种标识符或执行某些逻辑来仅更新所需的节点。无论如何,对于您的基本示例,这应该起作用,应该是解决问题的开始。祝你好运:)

答案 1 :(得分:1)

这是一个在没有SimpleXML的情况下在php中使用XML的一个非常简单的例子,但是SimpleXML会容易得多:

<?php
//Load the scores XML file
$scores = new DOMDocument();
$scores -> load('scores.xml');

//Get the <Games> tag
$games = $scores -> getElementsByTagName('Games');

//Create the new <Game> tag (Could probably be done better by first placing everything in an array or something)
$newGame = $scores -> createElement("Game");
$newGame -> appendChild($scores -> createElement("Time", "Finished"));
$newGame -> appendChild($scores -> createElement("Score", "2 - 5"));
$newGame -> appendChild($scores -> createElement("Row", "B"));

//Add the new <Game> tag under the <Games> tag
$games -> item(0) -> appendChild($newGame);

//Save again
$scores -> save('scores.xml');
?>