أعرف قراءة PHP وكتابة وإلحاق ... ولكن يمكنك إدراجها؟ أو إزالة السطر الأخير؟

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

  •  12-09-2019
  •  | 
  •  

سؤال

أحاول إنشاء ملف XML، ولكن يحتاج ملف XML إلى ملفوفة في العقد ... وبالتالي، ليس من السهل استخدام الإلحاق.

أي مساعدة مع هذا أن تكون كبيرة!!

يتكون جهاز XML الخاص بي من نوعين عقدة مختلفة:

<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>

ولدي صفحة اختبار بسيطة باستخدام JQuery لإرسال البيانات (ثابتة حاليا) إلى ملف PHP

<!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 الفكرة الصحيحة في تعليقه على سؤالك. يجب عليك استخدام واحدة من KPS العديد من مكتبات التلاعب XML المضمنة لإضافة العقدة، ثم تسلسلها وحفظها كملف نصي. في 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 +" وقم بتعيين المؤشر إلى سطر فارغ بين العنصر الأخير ونهاية الملف، فسوف يكتب عناصر مستوى الجذر إغلاق علامة، لذلك فقط أضفها مرة أخرى بعد كتابة عنصر الطفل الجديد. ضع في اعتبارك أنني كنت تكتب البرامج النصية PHP لجميع 4 ساعات، لذلك ربما تكون هناك طريقة أفضل، ولكن هذا هو أبسط أنا أتصل في حياتي المهنية.

$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";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top