2014-03-27 56 views
0

好的,请在我解释这个应用程序时忍受我。第一个视图显示了一个tableview,其中每行都是某人所做的“请求”,同样使用该应用程序。这些要求实际上是一个解析的XML文件,它看起来是这样的:PHP编辑现有的XML条目

<item> 
<title>Request</title> 
<name>Name</name> 
<Responses>0</Responses> 
</item> 

使用本段下面列出的剧本,我可以在会从文本框的文本中应用的iOS运行一些代码,并添加一个新的项目集的XML。

<?php 
$firstName = $_POST['firstName']; 
$lastName = $_POST['lastName']; 
$request = $_POST['request']; 
$anon = $_POST['anon']; 
$pubDate = $_POST['pubDate']; 
$loc = $_POST['loc']; 
//This line will load the XML file 
$xml = simplexml_load_file("URL.xml") or die("Not loaded!\n"); 
//print_r($xml); 
//This line gets the channel element (from an array returned by the xpath method) 
$channel = $xml->xpath('//channel'); 
$channel = $channel[0]; 
//print_r($channel); 
$person = $channel->addChild("item"); 
$person->addChild("first_name", $firstName); 
$person->addChild("last_name", $lastName); 
$person->addChild("title", $request); 
$person->addChild("date", $pubDate); 
$person->addChild("anonymous", $anon); 
$person->addChild("responses", "0"); 
$person->addChild("location", $loc); 

//This next line will overwrite the original XML file with new data added 
$xml->asXML("Test.xml"); 
?> 

实际的XML已经比我就把一开始更多的上市,我刚编辑下来,以节省空间,所以这就是为什么它和PHP不太匹配。

所有这些工作都很好,应用程序解析XML以显示所请求的内容,并且用户可以创建一个新的请求,然后显示在应用程序中。

我的问题是,当有人回应现有的请求时,我想<Responses>增加1.我可以用一个不同的脚本来查找该条目,并且可以对当前存在的任何数字+1在该项目的Response标签中?

我已经看过这个脚本,但它似乎要经过并搜索某个标记的所有内容,并在XML中更改该名称的所有标记。我期待找到一个具体的并改变它。建议?

$str = <<<XML 
<ScrapBook> 
    <Event> 
    <Name> Name of Event </Name> 
    <Blah>glop glop</Blah> 
    </Event> 
</ScrapBook> 
XML; 

$xmlDoc = new DOMDocument(); 
$xmlDoc->loadXml($str); 
$events = $xmlDoc->getElementsByTagName("Event"); 
foreach($events as $event){ 
    $eventNames = $event->getElementsByTagName("Name"); 
    $eventN = $eventNames->item(0)->nodeValue; 
    if(' Name of Event ' == $eventN){ 
     $eventNames->item(0)->nodeValue = 'New name'; 
    } 
} 
var_dump($xmlDoc->saveXML()); 

回答

0

你可以用simplexml去做;首先,选择<item>改变,那么存储新<Responses>

$xml = simplexml_load_string($x); // assume XML in $x 

// select <Responses> with xpath by title and name 
$responses = $xml->xpath("/items/item[title = 'Foo' and name = 'Bar']/Responses"); 

// store number + 1 
$responses[0][0] = $responses[0] + 1; 

看到它的工作:https://eval.in/127882

+0

我跟着你在做什么,在这里,但我会怎么写这个剧本出来,作为入门它对每个人的编辑会有所不同? – user717452

+0

基本上,因为这个想法是,用户选择一个条目,作出承诺,并且只有对该条目的响应增加1,我希望应用程序更改该名称和特定请求的响应。在PHP中,我该如何放置占位符? – user717452

+0

我试过这个'<?php $ firstName = $ _POST ['firstName']; $ lastName = $ _POST ['lastName']; $ title = $ _POST ['title']; $ xml = simplexml_load_file(“http://www.316apps.site90.net/Test.xml”)或死(“未加载!\ n”); $ responses = $ xml-> xpath(“// channel/item [title = $ title and first_name = $ firstName and last_name = $ lastName]/prayer_warriors”); $ responses [0] [0] = $ responses [0] + 1; $ xml-> asXML(“Test.xml”); ?>'但没有任何工作 – user717452