5

PHP を使用してこの XML ファイルを読み込もうとしていますが、ルート要素が 2 つあります。私が PHP で書いたコードは 1 つのルート要素しか読み取らず、もう 1 つ ( <action>) を追加するとエラーが発生します。私はこのようなことをしたい:if($xml->action=="register")次に、すべてのパラメーターを出力します。

これは私のXMLファイルです:

<?xml version='1.0' encoding='ISO-8859-1'?>
<action>register</action>
<paramters>
    <name>Johnny B</name>
    <username>John</username>    
</paramters>

そして、これは私のPHPスクリプトです:

<?php
$xml = simplexml_load_file("test.xml");

echo $xml->getName() . "<br />";

foreach($xml->children() as $child)
{
    echo $child->getName() . ": " . $child . "<br />";
}
?>

私は本当にこれをすべて行う方法がわかりません...

4

3 に答える 3

3

XML を修正してください。無効です。XML ファイルは、1 つのルート要素のみを持つことができます。

有効な XML の例:

<?xml version='1.0' encoding='ISO-8859-1'?>
<action>
    <type>register</type>
    <name>Johnny B</name>
    <username>John</username>
</actions>

または、パラメーターのみに独自の要素を持たせたい場合:

<?xml version='1.0' encoding='ISO-8859-1'?>
<action type="register">
    <name>Johnny B</name>
    <username>John</username>
</actions>

または、複数のアクションが必要な場合:

<?xml version='1.0' encoding='ISO-8859-1'?>
<actions>
    <action type="register">
        <name>Johnny B</name>
        <username>John</username>
    </action>
</actions>

編集

コメントで述べたように、先生は XML を修正する必要があります。無効です。また、彼は自分の XML をバリデーターに通す必要があります。

本当に必死なら、人工的なルート要素を導入することができますが、これは本当に悪い習慣であり、何としても避けるべきです:

$xmlstring = str_replace(
    array('<action>','</paramters>'),
    array('<root><action>', '</paramters></root>'),
    $xmlstring
);
于 2012-04-21T09:51:57.760 に答える
3

以前の回答はどれも正確ではありません。XML 仕様では、いくつかの種類のエンティティが定義されています。たとえば、ドキュメント エンティティ、外部の解析済みエンティティ、ドキュメント タイプの定義などです。あなたの例は、XMLパーサーが通常解析するように求められる整形式のドキュメントエンティティではありません。ただし、これは整形式の外部解析済みエンティティーです。整形式の外部解析済みエンティティを処理する方法は、次のように、スケルトン ドキュメント エンティティから参照することです。

<!DOCTYPE wrapper [
<!ENTITY e SYSTEM "my.xml">
]>
<wrapper>&e;</wrapper>

次に、ドキュメント エンティティを XML パーサーに渡します。

于 2012-04-21T17:01:52.047 に答える
0

xml ファイルなのでinvalid、次のトリックを実行できます。

  • 次のように 2 行目にダミーの開始タグを挿入します。<dummy>
  • 最後にそれを終了します</dummy>

幸せな解析;)

于 2012-04-21T09:52:37.800 に答える