2

次の XML 構造が与えられます (これは XML ファイルにあり、他の多くのコンテンツが含ま<p>れています。タグは、他のタグが続く可能性があることを示すためだけに存在します):

<TITEL1>...</TITEL1>  
<p>..</p>
<TITEL2>...</TITEL2>  
<TITEL3>...</TITEL3>
<TITEL3>...</TITEL3>  
<P>...<P>  

PHPを使用してこれに到達する方法はありますか(新しいファイルに書き込みます):

<TITEL1>
    <TITEL>...</TITEL>  
    <p>...</p>
    <TITEL2>
        <TITEL>...</TITEL>  
        <TITEL3>
            <TITEL>...</TITEL>
            <P>...</P>
        </TITEL3>
        <TITEL3>
            <TITEL>...</TITEL>
            <P>...</P>
        </TITEL3>
    </TITEL2>
</TITEL1>

または、言い換えれば、上位レベルのタイトルを下位レベルのタイトルとそれに続くすべてのコンテンツで囲み、ネスト構造を作成する方法はありますか。各 TITEL1、2、および 3 タグのコンテンツは、新しい要素に入る必要があり<TITEL>ます

フォーラムの XSLT 側で既に同じ質問をしましたが、c# または Java で試すようにアドバイスを受けました。私はこれらの言語を知らず、PHP の基本よりも多少知っているので、そのようにしようと考えました。誰か私を道に立たせてくれませんか?

4

2 に答える 2

2

PHPには、そのような構造を構築するために使用できる非常によく組み込まれたDOMサポートもあります。この拡張機能についての文書化を開始する場所は、http://de2.php.net/domです。

あなたの場合、最初にドキュメントを作成し、次にDOMDocument :: createElement DOMElement::appendChildを使用してその要素を別の要素に追加する必要があります

完了したら、DOMDocument :: saveを呼び出して、指定したファイルにDOMを保存します。

于 2010-01-21T11:10:53.350 に答える
0

ここで、これだけのために少し前に書いたコードをいくつか示します。

function array2xml($array) {
    static $index = 0;
    $pre = '';
    for ($i = 0; $i < $index;$i++) {
        $pre .= "\t";
    }
    $text = '';
    if (is_array($array)){
        foreach ($array as $k=>$v) {
            if (is_int($k)){
                if (is_array($v)){
                    $text = $text . array2xml($v);
                }
            } else if (is_string($k)){
                if (!is_array($v)){
                    $text .=  "$pre<$k>$v</$k>\n";
                } else if (is_array($v)) {
                    $index++;
                    $text .= "$pre<$k>\n".array2xml($v)."$pre</$k>\n";
                    $index--;
                }
            } else {
                if (is_array($v)){
                    $index++;
                    $text .= array2xml($v);
                    $index--;
                }
            }
        }
        return "$text";
    } else {
        return $text . $array;
    }
}
$a = array(
    "hello" => array(
        "world" => " Yay!",
    ),
    "messages" => array(
        array(
            array(
                "message" => "Goodby cruel world!"
            ),
            "message" => array(
                "text1" => "Yo",
                "text2" => "dude!",
            ),
        )
    ),
);
echo array2xml($a);

これは次のように出力されます:

<hello >
    <world> Yay!</world>
</hello>
<messages >
    <message>Goodby cruel world!</message>
    <message >
        <text1>Yo</text1>
        <text2>dude!</text2>
    </message>
</messages>

最初のタグがインデントされている理由は 100% わかりませんが、特に気にすることはありませんでした。

于 2010-01-21T12:56:14.897 に答える