私はPHPの読み取り、書き込み、および追加知っている...しかし、あなたは挿入することができますか?または最後の行を削除しますか?

StackOverflow https://stackoverflow.com/questions/1110764

  •  12-09-2019
  •  | 
  •  

質問

APPENDを使用することは容易ではない、ので、...私はXMLファイルを作成しようとしていますが、XMLファイルは、ノードに包まれる必要がある。

これですべてのヘルプは素晴らしいことだ!!

私のXMLは、2つの異なるノードタイプで構成されています:

<entry id="1_0">
    <title>This is the title</title>
    <description>This is the description...</description>
    <subName>Publishers Name</subName>
    <date>Saturday, June 11th, 2007, 5:46:21 PM</date>
    <BorF>bug</BorF>
</entry>

<vote id="1_0">5</vote>

そして、私はPHPファイルにデータを(現在は静的な)送信するためにjQueryを使用した簡単なテストページをしました。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>


<script type="text/javascript" src="jquery-1.3.2.min.js"></script>

<script>

$(function(){


    $("#addVote").click(function() {
        $.ajax({
            type: "POST",
            url: "saveListData.php",
            data: 'url=bugs_features_listdata.xml&listData=\n<vote id="1_2">3</vote>',
            async: false,
            cache: false,
            success: function(data, textStatus) {
                if (window.console) console.log(textStatus);
            },
            complete: function(XMLHttpRequest, textStatus){
                if (window.console) console.log(textStatus);
            }
        });
    });

    $("#addEntry").click(function() {
        $.ajax({
            type: "POST",
            url: "saveListData.php",
            data: 'url=bugs_features_listdata.xml&listData=\n<entry id="1_1">\n\
\t<title>This is the title 1</title>\n\
\t<description>This is the description...</description>\n\
\t<subName>Publishers Name</subName>\n\
\t<date>Saturday, June 11th, 2007, 5:46:21 PM</date>\n\
\t<BorF>bug</BorF>\n\
</entry>',
            async: false,
            cache: false,
            success: function(data, textStatus) {
                if (window.console) console.log(textStatus);
            },
            complete: function(XMLHttpRequest, textStatus){
                if (window.console) console.log(textStatus);
            }
        });
    });


}); 

</script>

</head>

<body>


<a id="addVote" href="#">ADD VOTE</a><br /><br /><a id="addEntry" href="#">ADD ENTRY</a>


</body>
</html>

...それは、現在、私のXMLファイルに追加し、私は始め/終わりのノードを必要とします。

役に立ちましたか?

解決

txwingerは、あなたの質問に彼のコメントで正しい考えを持っていました。あなたはそれをシリアル化し、テキストファイルとして保存し、組み込みのXML操作ライブラリノードを追加するために、多くのPHPSのいずれかを使用する必要があります。で SimpleXMLをに、例えばます:

$xml = simplexml_load_file('test.xml');
$vote = $xml->addChild('vote', '5');
$vote->addAttribute('id','1_0');
$fp = fopen('test.xml', 'w');
fwrite($fp, $xml->asXML());
fclose($fp);

あなたのタスクに合うかもしれないの他のXML操作ライブラリがあります。より良い

他のヒント

私はそれがあなたのXML文書の構造に依存すると言うでしょう。予測可能である「休止」した場合、あなたが戻って、「休止」に新しいデータを追加し、あなたのファイルからその部分を切り取って貼り付けることができます:

      ⋮
n-1:     <node>last node</node>
n  :  </root>


      ⋮
n-1:     <node>last node</node>
n  :     <node>new node</node>
n+1:  </root>

あなたはこの迅速かつ汚い方法をやろうとしている場合: あなたは「+ R」でファイルを開き、最後の要素と、ファイルの末尾の間に空白行へのポインタを設定した場合、それはあなたが新しい子を書き込みした後にこれだけ戻ってそれを追加し、タグを閉じルートレベルの要素の上に書き込みます素子。そこにはおそらくより良い方法ですが、これは私が私の4時間のキャリアの中で作ってみたのが最も簡単ですので、私は4時間のすべてのためのPHPスクリプトを書いているに注意してください。

$name = $_POST["name"];
$phone = $_POST["phone"];

$fh = fopen("xml-test-1.xml", "r+");
if (!$fh)
{
    die("Failed to open");
}

fseek($fh, -11, SEEK_END);
fwrite($fh, "<person> \n");
fwrite($fh, "<name>$name</name> \n");
fwrite($fh, "<phone>$phone</phone> \n");
fwrite($fh, "</person> \n");
fwrite($fh, "</people> \n");
fclose($fh);

echo "now look and see if anything was added";
scroll top