使用 simplexml 将 xml 节点值更新 1。是不是可以?

Posted

技术标签:

【中文标题】使用 simplexml 将 xml 节点值更新 1。是不是可以?【英文标题】:update xml node value by 1 with simplexml. Is it possible?使用 simplexml 将 xml 节点值更新 1。是否可以? 【发布时间】:2012-11-22 10:02:21 【问题描述】:

我有一个具有以下布局的 XML 文件。当用户查看 wordpress 帖子时,id get 与默认值为 1 的 <postviews> 节点一起写入 xml 文件,如下所示……

<posts>
    <post id="22640">
        <postviews>1</postviews>
    </post>
    <post id="7780">
        <postviews>1</postviews>
    </post>
</posts>

如何编写更新查询,以便当再次看到 wordpress 帖子时,特定帖子 id 的 postviews 值会更新为 1,因此看起来像……

<posts>
    <post id="22640">
        <postviews>2</postviews>
    </post>
    <post id="7780">
        <postviews>1</postviews>
    </post>
</posts>

我似乎无法定位正确的节点。如何使用特定的帖子 ID 更新节点的子节点?

谢谢,詹姆斯

【问题讨论】:

发布编辑作为答案并结束问题(或者我会这样做,如果你愿意的话)。 发布您自己的答案,而不是将其附加到您的问题中! :) 会的。谢谢你的建议,我是这个网站的新手,所以很抱歉:-) 【参考方案1】:

设法自己找到答案。这是如果文件中没有帖子 id 则添加新节点的代码,如果是则将节点值更新为 1...

//Get the wordpress postID
$postID = get_the_ID();

$postData = get_post($postID);

// echo $postID.'<br />'.$postData->post_title.'<br />'.$postData->post_date_gmt.'<br />';

$xmlFile = '/Applications/MAMP/htdocs/giraffetest/test.xml';

// load the document
$xml = simplexml_load_file($xmlFile);

// Check to see if the post id is already in the xml file - has it already been set?
$nodeExists = $xml->xpath("//post[@id=".$postID."]");

//Count the results
$countNodeExists = count($nodeExists);

if($countNodeExists > 0)  // If the ID is already in the file

    // echo 'ID already here';

    // get the correct node
    $result = $xml->xpath("//post[@id=".$postID."]/postviews");

    // heres the trick - the first result of xpath, and the node value (stored in [0])
    $result[0][0] = $result[0][0]+1; 

 else  // If the ID isn;'t there, add a new entry in the xml file for the post

    //echo 'ID added';

    $postNode = $xml->addChild('post'); // adding a new <post> to the top level node
    $postNode->addAttribute('id', $postID); // adding a <postid> inside the new <post>
    $postNode->addChild('postviews', 1); // adding a postviews inside the new <post>


// save the updated document
$xml->asXML($xmlFile);

【讨论】:

以上是关于使用 simplexml 将 xml 节点值更新 1。是不是可以?的主要内容,如果未能解决你的问题,请参考以下文章

使用 simplexml 获取 XML 文档的根节点

如何将更改的 SimpleXML 对象保存回文件?

详解SimpleXML添加_修改_删除_遍历XML节点属性

如何将 XML 属性转换为文本节点

访问 SimpleXML 节点的 XML 属性

xml查找节点父节点并删除simplexml php