SimpleXML PHP 格式化

发布于 2024-11-27 19:24:48 字数 3725 浏览 1 评论 0原文

我正在尝试创建一个页面来显示 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。我需要从 xml 中提取 8-13 个以上的值。

我将向您展示 XML 的 /unitstat 部分:

<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;
}

对于每个值和每个子组。有没有更简单的方法可以从我需要的特定 ID 中获取所有这些值?

我认为我应该创建一个数组,然后通过它们调用?

如果您需要更多信息,请告诉我!

I am trying to create a page which will show specific information from an XML document. I have run into a snag where I would like to find out the best possible way to do this.

My XML is a large list that is built from a program called Army Builder. I am trying to dynamically pull specific information for each "squad".

Right now, a sample of my code looks like this:

<?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>

The line that finds the "unitWS" is what I am asking about. Now, if you follow the entire xpath, it would read //squad/entity[@name='Nameoftheentity']/unitstat[@id="WS"]/@value and that would give me the unit's WS. I need to pull 8-13 more values from the xml.

I will show you the /unitstat section of the 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="-" />

I need to pull the VALUES of At, BS, In, Ld, St, To, Ws , Wo and Save for each dynamically found unit. The only way I see it possible is to type this:

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

for every one of the values and for every one of the sub groups. Is there an easier way to get all of those values from the specific ID's that I need?

I would assume that I should create an array, then call through them?

Please let me know if you need more information!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月静好 2024-12-04 19:24:48

用“或”运算符?

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

编辑:
抱歉我误会了。这是我的建议:

<?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);

With the "or" operator?

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

edit:
Sorry I misunderstood. Here is my proposition:

<?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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文