4

PHP の SimpleXML 拡張機能を使用して XML ドキュメントを作成し、ファイルにトークンを追加しています。

$doc->addChild('myToken');

これにより、(私が知っている)自己終了または単一のタグが生成されます。

<myToken/>

ただし、私が通信している老朽化した Web サービスは、自己終了タグ全体でつまずいているため、個別の開始タグと終了タグが必要です。

<myToken></myToken>

問題は、生成された XML をpreg_replaceで実行する以外に、どうすればよいかということです。

4

5 に答える 5

4

SimpleXMLElement->__constructおよびLibXML Predefined Constantsのドキュメントから、これはうまくいくはずだと思います:

<?php
$sxe = new SimpleXMLElement($someData, LIBXML_NOEMPTYTAG);

// some processing here

$out = $sxe->asXML();
?>

それを試して、それが機能するかどうかを確認してください。そうでなければ、残念ながら preg_replace-land です。

于 2008-11-03T20:06:43.500 に答える
3

値を空 (つまり、null、空の文字列) に設定すると、開き括弧と閉じ括弧が使用されます。

$tag = '<SomeTagName/>';

echo "Tag: '$tag'\n\n";

$x = new SimpleXMLElement($tag);
echo "Autoclosed: {$x->asXML()}\n";

$x = new SimpleXMLElement($tag);
$x[0] = null;
echo "Null: {$x->asXML()}\n";

$x = new SimpleXMLElement($tag);
$x[0] = '';
echo "Empty: {$x->asXML()}\n";

例を参照してください: http://sandbox.onlinephpfunctions.com/code/10642a84dca5a50eba882a347f152fc480bc47b5

于 2015-04-11T17:43:51.400 に答える
2

現時点では、LibXML で自己終了タグを回避することはできません。@Piskvor によって提案されたソリューションの 1 つが機能しません。

ここで述べたように、LIBXML_NOEMPTYTAG は simplexml では機能しません。

This option is currently just available in the DOMDocument::save and DOMDocument::saveXML functions.

その回避策は、この質問の回答を使用することです

于 2014-07-30T12:07:41.660 に答える
0

最善の解決策ではないかもしれませんが、同じ問題が発生し、pre_replace を使用してすべての自己終了タグを完全な形式に変更して解決しました...

$xml_reader = new XMLReader;
$xml_reader->open($xml_file);

$data = preg_replace('/\<(\w+)\s*\/\s*\>/i', '<$1></$1>', $xml_reader->readOuterXML());
于 2015-06-24T13:46:44.563 に答える