PHP углубляет структуру XML - PullRequest
       12

PHP углубляет структуру XML

2 голосов
/ 21 января 2010

с учетом следующей структуры 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, я подумал попробовать это таким образом.Кто-нибудь может выставить меня на моем пути?

Ответы [ 2 ]

2 голосов
/ 21 января 2010

PHP также имеет очень хорошо встроенную поддержку DOM, которую вы можете использовать для создания таких структур. Место, где можно начать документирование этого расширения, будет http://de2.php.net/dom.

В вашем случае сначала необходимо создать документ, а затем использовать DOMDocument :: createElement DOMElement :: appendChild для добавления этого элемента в другой элемент

После того, как вы закончите, вызовите DOMDocument :: save, чтобы сохранить DOM в указанном файле.

0 голосов
/ 21 января 2010

Вот код, который я недавно написал для этого:

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%, почему первый тег имеет отступ, но меня это никогда не беспокоило.

...