【问题标题】:Replace child in XML替换 XML 中的子项
【发布时间】:2013-03-13 06:11:39
【问题描述】:
<?php
$files = glob('users/*.xml');
foreach($files as $file) {
    $xml = new SimpleXMLElement($file, 0, true);
    echo '
        <tr>
            <td><input type="radio" name="browser" onclick="check(this.value)" value="'. basename($file) .'"></td>
            <td class="alternate-row1">'. basename($file, '.xml') .'</td>
            <td><span id="itm1" onclick="exchange(this.id)">'. $xml->name .'</span><input id="itm1b" class="replace" type="text" name="newname"></td>
            <td class="alternate-row1">'. $xml->lastname .'</td>
            <td>'. $xml->email .'</td>
            <td class="alternate-row1">'. $xml->level .'</td>
            <td>'. $xml->birthday .'</td>
            <td class="alternate-row1">'. $xml->gender .'</td>
            <td>'. $xml->age .'</td>
            <td class="alternate-row1">'. $xml->country .'</td>
        </tr>';
}
session_start();
if (isset($_POST['save'])){
    $member = $_POST['newname'];
    $dom = new DOMDocument();
    $dom->load('users/' . basename($file) . '.xml');
    $editname = $dom->getElementsByTagName('name');
    $newname = $dom->createTextNode($member);
    foreach ($editname as $edit) {
       $edit->parentNode->replaceChild($newname, $edit);
    }
    $dom->save('users/' . basename($file) . '.xml');
}
?>

所以我编写了这段代码,你可以看到它有 DOM 和 Simple XML 元素。 我尝试使用$_POST throw 输入命令替换子项,输入框在上面的 echo 部分中,我使用 js 替换代码,它通过 onclick 命令替换文本以输入文本(对我的问题并不重要,它只是为了解释)。 无论如何,由于代码无法正常工作,因此我几乎没有卡住,我设置了 $_POST,我尝试使用在 Stack Overflow 中找到的一些指南,但由于它与我的代码不匹配,因此无法正常工作。

你有什么答案吗?

感谢您的帮助,Y.D.

【问题讨论】:

  • 我不太确定,但是您的解决方案对我来说似乎有点过分了。为什么不通过ajax调用php并根据结果从javascript更新dom?
  • 不...不可能从 js 更新 dom,只能从 PHP,我的问题是缺少某些东西,或者我使用 DOM 而不是 SimpleXML,但我不知道如何修复它或者我的真正问题是什么毕竟这就是我问这个问题的原因。
  • 请出示您的 xml 和所需 xml 的样本。
  • 我不认为 xml 有它的一部分,它是普通的 XML 版本 1.0 name 元素是我想要编辑的元素。
  • 如果确实回答了您的问题,请考虑接受一个答案(点击左侧的勾号)

标签: php html xml


【解决方案1】:

使用simplexml 的示例 ---> 观看现场演示:http://codepad.viper-7.com/2oR5Wk

$xmlstr = <<<XML
<root>
    <head>
        <name id="1">test</name>
        <name id="2">file</name>
        <name id="3">name</name>
    </head>
</root>
XML;

$xml = simplexml_load_string($xmlstr);

echo "<pre>";
var_dump($xml);
echo "</pre>";

$x = count($xml->head->name)-1;

for ($x; $x>=0; $x--) {

    $xml->head->name[$x] = "newname";

} 

echo "<pre>";
var_dump($xml);
echo "</pre>";

【讨论】:

    猜你喜欢
    • 2016-09-12
    • 2018-07-13
    • 1970-01-01
    • 2016-06-10
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多