6

新しいデータを既存の XML ファイルに挿入しようとしましたが、うまくいきません。これが私のxmlファイルです:

<list>
    <activity>swimming</activity>
    <activity>running</activity>
<list>

ここで、私のアイデアは 2 つのファイルを作成することでした。ファイルの内容を表示し、新しい要素を挿入するためのフィールドを提供するインデックス ページと、データを XML ファイルに挿入する php ページです。index.php のコードは次のとおりです。

<html>
<head><title>test</title></head>
</head>

<?php
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml', LIBXML_NOBLANKS);

    $activities = = $xmldoc->firstChild->firstChild;
    if($activities!=null){
        while(activities!=null){
            echo $activities->textContent.'<br/>';
            activities = activities->nextSibling.
        }
    }
?>

<form name='input' action='insert.php' method='post'>
    insert activity:
    <input type='text' name='activity'/>
    <input type='submit' value='send'/>
</form>
</body>
</html

insert.php のコードは次のとおりです。

<?php
    header('Location:index.php');
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml');

    $newAct = $_POST['activity'];

    $root = $xmldoc->firstChild;

    $newElement = $xmldoc->createElement('activity');
    $root->appendChild($newElement);
    $newText = $xmldoc->createTextNode($newAct);
    $newElement->appendChild($newText);

    $xmldoc->save('sample.xml');
?>

ユーザーが index.php にアクセスすると、XML ファイルに含まれる現在のアクティビティのリストが表示され、その下に新しいアクティビティを挿入できるテキスト フィールドが表示されます。送信ボタンをクリックすると、ページは insert.php を呼び出します。これには、DOM ツリーで XML ファイルを開くコードが含まれており、ルート ノードの下に新しいノードを挿入し、ユーザーがいるべき index.php ページを呼び出します。アクティビティのリストを見ることができます。彼の新しいアクティビティは他の人の下にあります。機能していません。ボタンをクリックして新しいエントリを送信すると、ページが更新され、明らかに何も起こらず、XML は以前と同じです。私は何を間違えましたか?また、何か良い方法があれば教えていただきたいです。

4

6 に答える 6

8

コード ブロックは、既存のファイルからコピー アンド ペーストされていますか? もしそうなら、私は2つの潜在的な問題を見ます:

<form name='input' action'insert.php' method='post'> // should be:
<form name="input" action="insert.php" method="post">

注: action="insert.php"が欠落しているため、送信せずにフォームがリロードされるだけです。これは、説明した動作です。

次に、「sample.xml」への書き込み権限があることを確認してください。実際に何かを書いているかどうかを確認できます。

print 'I wrote '.$xmldoc->save('sample.xml').' bytes of data';
于 2008-10-11T21:01:06.737 に答える
5

最終的解決

サンプル.XML

<list>
    <activity>swimming</activity>
    <activity>running</activity>
    <activity>Jogging</activity>
    <activity>Theatre</activity>
    <activity>Programming</activity>
</list>

index.php

<html>
<head><title>test</title></head>
</head>

<?php
    $xmldoc = new DOMDocument();
    $xmldoc->load("sample.xml", LIBXML_NOBLANKS);

    $activities = $xmldoc->firstChild->firstChild;
    if($activities!=null){
        while($activities!=null){
            echo $activities->textContent."<br/>";
            $activities = $activities->nextSibling;
        }
    }
?>

<form name="input" action="insert.php" method="post">
    insert activity:
    <input type="text" name="activity"/>
    <input type="submit" value="send"/>
</form>
</body>
</html>

insert.php

<?php
    header('Location:index.php');
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml');

    $newAct = $_POST['activity'];

    $root = $xmldoc->firstChild;

    $newElement = $xmldoc->createElement('activity');
    $root->appendChild($newElement);
    $newText = $xmldoc->createTextNode($newAct);
    $newElement->appendChild($newText);

    $xmldoc->save('sample.xml');
?>
于 2009-12-27T03:25:39.167 に答える
2

実際、あなたは 2 か所で間違いを犯しました。

この行は、タイプミスが原因であると思います。等号がありませんでした。また

これらの行は

今すぐ試してみてください。うまくいくはずです。

于 2008-11-02T08:25:52.620 に答える
2

$newText = $xmldoc->createTextNode($newActv);

この行を次のように変更します

$newText = $xmldoc->createTextNode($newAct);

于 2008-10-29T13:34:38.120 に答える
1

これは私が私のために働くコードです。

index.php

<html>
<head><title>test</title></head>
</head>

<?php
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml', LIBXML_NOBLANKS);

    $activities = $xmldoc->firstChild->firstChild;
    if($activities!=null){
        while($activities!=null){
            echo $activities->textContent.'<br/>';
            $activities = $activities->nextSibling;
        }
    }
?>

<form name='input' action='insert.php' method='post'>
    insert activity:
    <input type='text' name='activity'/>
    <input type='submit' value='send'/>
</form>
</body>
</html>




insert.php


<?php
    header('Location:index.php');
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml');

    $newAct = $_POST['activity'];

    $root = $xmldoc->firstChild;

    $newElement = $xmldoc->createElement('activity');
    $root->appendChild($newElement);
    $newText = $xmldoc->createTextNode($newAct);
    $newElement->appendChild($newText);

    $xmldoc->save('sample.xml');
?>

サンプル.xml

<list>
  <activity>swimming</activity> 
  <activity>running</activity> 
</list>
于 2009-10-18T17:05:12.550 に答える
1

あなたのコードの問題点はわかっていると思います。あなたはそのように書くべきではありません:<?xml-stylesheet type="text/xsl" href="sample.xsl" ?> 正しいコードは:

<?xml:stylesheet type="text/xsl" href="sample.xsl" ?>
于 2009-03-24T02:57:31.063 に答える