SimpleXML PHP форматирование - PullRequest
       10

SimpleXML PHP форматирование

0 голосов
/ 04 августа 2011

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

Мой XML - это большой список, созданный из программы под названием Army Builder. Я пытаюсь динамически извлекать конкретную информацию для каждого «отряда».

Прямо сейчас пример моего кода выглядит так:

<?PHP  
        //THIS SECTION FINDS THE SQUAD/UNIT NAME OF THE FIRST ENTITY
        foreach($squad->xpath('entity') as $squadSub){
            $squadSubName = stripslashes($squadSub['name']);
            $squadSubCount = $squadSub['count'];


            foreach($squadSub->xpath('unitstat[@id="WS"]/@value') as $squadSubStat){
                $unitWs = $squadSubStat;
            }

        ?>
        <tr>
            <td><?= $squadSubCount; ?></td><td><?= $squadSubName; ?></td><td><?= $unitWs; ?></td><td><?= $unitBs; ?></td><td><?= $unitSt; ?></td><td><?= $unitTo; ?></td><td><?= $unitWo; ?></td><td><?= $unitIn; ?></td><td><?= $unitAt; ?></td><td><?= $unitLd; ?></td><td><?= $unitaSv; ?></td><td><?= $unitiSv; ?></td><td><?= $unitcSv; ?></td>
        </tr>

Строка, которая находит «unitWS» - это то, о чем я спрашиваю. Теперь, если вы выполните весь путь xpath, он будет читать //squad/entity[@name='Nameoftheentity']/unitstat[@id="WS"]/@value, и это даст мне WS устройства. Мне нужно вытащить еще 8-13 значений из XML.

Я покажу вам раздел / unitstat XML:

<unitstat id="iaStruPnt" name="Structure" value="-" />
         <unitstat id="iaVdShld" name="Void Shld" value="-" />
         <unitstat id="vdrAt" name="At" value="-" />
         <unitstat id="vdrBS" name="BS" value="-" />
         <unitstat id="vdrMass" name="Mass Point" value="-" />
         <unitstat id="vdrSize" name="Size" value="Small" />
         <unitstat id="vdrTpt" name="Transport" value="0" />
         <unitstat id="vdrVehSv" name="Veh Save" value="-" />
         <unitstat id="vdrWS" name="WS" value="-" />
         <unitstat id="vdrWpnAP" name="AP" value="-" />
         <unitstat id="vdrWpnRang" name="Range" value="-" />
         <unitstat id="vdrWpnSh" name="Shots" value="-" />
         <unitstat id="vdrWpnStr" name="S" value="0" />
         <unitstat id="vdrWpnType" name="Type" value="0" />
         <unitstat id="At" name="At" value="2/3" />
         <unitstat id="BS" name="BS" value="4" />
         <unitstat id="Fam" name="Familiar" value="0" />
         <unitstat id="Front" name="FA" value="0" />
         <unitstat id="Group" name="Grp" value="" />
         <unitstat id="In" name="In" value="4" />
         <unitstat id="Ld" name="Ld" value="10" />
         <unitstat id="Rear" name="RA" value="0" />
         <unitstat id="Save" name="Save" value="2+/5(i)" />
         <unitstat id="Side" name="SA" value="0" />
         <unitstat id="St" name="St" value="4" />
         <unitstat id="To" name="To" value="4" />
         <unitstat id="WS" name="WS" value="4" />
         <unitstat id="Wo" name="Wo" value="1" />
         <unitstat id="iaAmmo" name="Ammo Load" value="0" />
         <unitstat id="iaCrew" name="Crew" value="-" />
         <unitstat id="iaMinRge" name="Min Rge" value="n/a" />
         <unitstat id="iaPowField" name="PowerField" value="-" />

Мне нужно вытащить ЗНАЧЕНИЯ At, BS, In, Ld, St, To, Ws, Wo и Save для каждой динамически найденной единицы. Единственный способ увидеть это возможно - это набрать:

foreach($squadSub->xpath('unitstat[@id="WS"]/@value') as $squadSubStat){
    $unitWs = $squadSubStat;
}

для каждого из значений и для каждой из подгрупп. Есть ли более простой способ получить все эти значения из определенных идентификаторов, которые мне нужны?

Я бы предположил, что мне следует создать массив, а затем вызывать их?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация!

1 Ответ

1 голос
/ 04 августа 2011

С оператором "или"?

<?php
$squadSub->xpath('unitstat[@id="WS" or @id="BS" or @id="whatever"]/@value');

edit:
Извините, я неправильно понял.Вот мое предложение:

<?php
$units = array();

foreach (array('WS', 'BS', 'Save') as $id)
{
    if ($tmp = $squadSub->xpath("unitstat[@id='$id']"))
        $units[$id] = (string)$tmp[0]['value'];
}

print_r($units);
...