【问题标题】:PHP To Edit Existing XML EntryPHP 编辑现有 XML 条目
【发布时间】:2014-03-27 17:59:27
【问题描述】:

好的,请耐心等待我解释这个应用程序。第一个视图显示了一个表格视图,其中每一行都是某人使用该应用程序提出的“请求”。这些请求实际上是一个经过解析的 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 以显示已请求的内容,用户可以发出新请求,然后将显示在应用程序中。

我的问题是,当有人响应现有请求时,我希望 &lt;Responses&gt; 增加 1。我可以用不同的脚本做些什么来找到该条目,然后 +1 到当前的任何数字是否存在于该项目的响应标签中?

我看过这个脚本,但它似乎会遍历并搜索某个标签的所有内容,并更改 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());

【问题讨论】:

    标签: php ios xml post http-post


    【解决方案1】:

    您可以使用simplexml 来执行此操作;首先选择要更改的&lt;item&gt;,然后存储新的&lt;Responses&gt;

    $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

    【讨论】:

    • 我按照您在此处所做的操作,但我将如何编写此脚本,因为它编辑的条目因人而异?
    • 基本上,由于这个想法是用户选择一个条目,做出承诺,并且该条目的响应仅上升 1,我希望应用程序更改该名称的响应并具体要求。在 PHP 中,我如何为此放置一个占位符?
    • 我试过这个&lt;?php $firstName = $_POST['firstName']; $lastName = $_POST['lastName']; $title = $_POST['title']; $xml = simplexml_load_file("http://www.316apps.site90.net/Test.xml") or die("Not loaded!\n"); $responses = $xml-&gt;xpath("//channel/item[title = $title and first_name = $firstName and last_name = $lastName]/prayer_warriors"); $responses[0][0] = $responses[0] + 1; $xml-&gt;asXML("Test.xml"); ?&gt; 但没有任何效果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2011-11-13
    • 2017-12-15
    • 1970-01-01
    • 2016-05-16
    • 2017-12-04
    相关资源
    最近更新 更多