0

XMLファイルの終了タグを削除したいのですが。
現在、simplexmlを使用してファイルをロードしています。
removeChildを見ましたが、ルートの終了タグを削除するためにそれを使用している人の良い例は見つかりませんでした。

私は現在持っています:

<root>
    <tag>
        <info1>Some info</info1>
        <info2>Some info</info2>
    </tag>
</root>

になります:

<root>
    <tag>
        <info1>Some info</info1>
        <info2>Some info</info2>
    </tag>

あまり苦労せずにやりたいのですが、誰か知ってる?

編集:コメントで述べられているように私はこれを解決しました。質問で述べたはずなので、simpleXMLを使用する必要はありませんでした。

4

3 に答える 3

0

ファイルの読み取り方法を変更し、simpleXML オブジェクトではなくテキストとして取得することで解決しました。その後、str_replace でタグを削除し、新しいコンテンツを追加します。(私が知っている完璧ではありませんが、期待どおりに機能します)

于 2013-04-15T14:03:49.867 に答える
0

実際、SimpleXML のような XML パーサーは無効な XML を作成できないため、これはオプションではありません。

しかし、それは明らかに最後の行です。したがって、最後から 2 番目の行区切り記号を検索して、最後を切り取ることができます。それは簡単にできるはずです。あなたがSimpleXMLであると書いているように、XMLを文字列として返す場合、行区切りは次のとおりです"\xA"(US-ASCII/ISO-8859-1/UTF-8でエンコードされたXMLファイルの場合、通常はそうです):

$xml  = $simpleXml->asXML();
$last = strrpos($xml, "\xA", -2);
if ($last === false) {
    throw new UnexpectedValueException('Can not find beginning of last line.');
}
echo substr($xml, 0, $last), "\n";

デモ

これは本当に厳密に書かれたものではありませんが、あなたのケースにぴったりかもしれません.

于 2013-03-06T10:42:35.097 に答える
0

明らかに、既存の simplexml オブジェクトにデータを追加したいですか? データを有効に保つその他のアプローチ:

  1. simplexml の add-methods を使用します。

  2. ループで simplexml から読み取り、xmlwriter で新しいファイルに書き込み、コマンドを送信してルート要素を閉じる前に新しい xml データを追加します。

于 2013-03-06T12:04:52.903 に答える