PHP загружает ненужные элементы из файла XML - PullRequest
0 голосов
/ 27 июля 2011

Я не хочу загружать некоторые данные из моего XML-файла, используя эту функцию:

public function getElements()
{
    $elements = array();

    $element = $this->documentElement->getElementsByTagName('elements')->item(0);

    // checks if it has any immunities
    if( isset($element) )
    {
        // read all immunities
        foreach( $element->getElementsByTagName('element') as $v)
        {
            $v = $v->attributes->item(0);

            // checks if immunity is set
            if($v->nodeValue > 0)
            {
                $elements[$v->nodeName] = $v->nodeValue;
            }
        }
    }

    return $elements;
}

Я не хочу загружать эти элементы из моего XML-файла:

<elements>
    <element physicalPercent="10"/>
    <element icePercent="10"/>
    <element holyPercent="-10"/>
</elements>

Я не хочу загружать только имя узла элемента и значение узла.

Получил этот код в цикле запросов:

            $elements = $monster->getElements();
            $elN = 0;
            $elC = count($elements);
            if(!empty($elements)) {
                foreach($elements as $element => $value) {
                    $elN++;
                    $elements_string .= $element . ":".$value;
                    if($elC != $elN)
                        $elements_string .= ", ";
                }
            }

И, наконец, вывод переменной $ elements_string неверен:

earthPercent:50, holyPercent:50, firePercent:15, energyPercent:5, physicalPercent:25, icePercent:30, deathPercent:30firePercent:20, earthPercent:75firePercent:20, earthPercent:75firePercent:20, earthPercent:75physicalPercent:70, holyPercent:20, deathPerce

Это должно скорее вернуть:

physicalPercent:10, icePercent:10, holyPercent:-10

Не могли бы вы помочь мне еще раз? :) 1022 *

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Хорошо, XML-Parser не знает, какие элементы вы хотите загрузить, а какие нет, - вы должны отфильтровать это самостоятельно. Затем вам нужно решить, где вы хотите отфильтровать нужные вам элементы в getElements -функции, которую вы разместили, или в «цикле запросов», как вы его называете.

Должно ли getElements быть некоторой общей функцией, которая должна возвращать все элементы? Затем вы должны изменить эту проверку if($v->nodeValue > 0) на что-то вроде if(!empty($v->nodeValue)), иначе вы не получите значение «holyPercent», поскольку оно отрицательное (а старое выражение становится ложным).

Затем в «цикле запросов» просто выберите нужные элементы:

foreach($elements as $element => $value) {
    if(in_array($element, array("physicalPercent", "icePercent", "holyPercent"))) {
        $elN++;
        $elements_string .= $element . ":".$value;
        if($elC != $elN)
            $elements_string .= ", ";
    }
}
0 голосов
/ 27 июля 2011

Всего:

$xml = new SimpleXMLElement($xmlfile);

А потом:

for($i=1;$i<Count($xml->elements);$i++)
    echo $xml->elements[$i][0];

Не пробовал, работает ли он с [0], обычно я использую:

    echo $xml->elements[$i]['attributename'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...