循环时无法获取所有数据xml

时间:2017-09-19 09:40:49

标签: php html mysql xml

我有问题,我希望从我的xml文件中获取许多标签名称中的所有数据。 但是当我循环时,只需在第一个标签中获得一个。我的英语。

这是我的代码和示例格式xml。

代码:

$xml = @simplexml_load_file('C://xampp/htdocs/logxml.xml'); 
foreach ($xml->children() as $b){ 
    echo $MakeAndModel = $b->{'xdm:ComponentGroup'}->{'xdm:Component'}->{'dd:DigitalS‌​torageTypeEnum'}; 
}

 <xdm:ComponentGroup>
 <xdm:Component id="dev1300" componentType="digitalStorage">
 <dd:DigitalStorageTypeEnum>harddisk</dd:DigitalStorageTypeEnum>
 <dd:Capacity>
 <dd:MaxCapacity>16</dd:MaxCapacity>
 <dd:Unit>bytes</dd:Unit>
 </dd:Capacity>
 </xdm:Component>
 </xdm:ComponentGroup> 

 <xdm:Component id="dev1350" componentType="digitalStorage">
 <dd:DigitalStorageTypeEnum>ram</dd:DigitalStorageTypeEnum>
 <dd:Capacity>
 <dd:MaxCapacity>1040187392</dd:MaxCapacity>
 <dd:Unit>bytes</dd:Unit>
 </dd:Capacity>
 </xdm:Component>

输出=硬盘,没有其他人

以及我的真实xml文件下面仍然有许多相同的标签名称,我想获得该值。但它不起作用。任何人都可以帮忙。

2 个答案:

答案 0 :(得分:0)

这里的错误:

Intent i = new Intent(OldActivity.this, NewActivity.class);
// clear all activities from back stack
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

你必须把它放在xml的底部

 </xdm:ComponentGroup> (element close)

答案 1 :(得分:0)

存在一些问题,主要的问题是使用@隐藏了隐藏它可能加载XML文件的任何问题。我已经更正了文件,现在就是......

<?xml version="1.0" encoding="UTF-8"?>
<xdm:ComponentGroup xmlns:xdm="http://www.hp.com/schemas/imaging/con/xdm/1.1/"
    xmlns:dd="http://www.hp.com/schemas/imaging/con/dictionaries/1.0/">
    <xdm:Component id="dev1300" componentType="digitalStorage">
        <dd:DigitalStorageTypeEnum>harddisk</dd:DigitalStorageTypeEnum>
        <dd:Capacity>
            <dd:MaxCapacity>16</dd:MaxCapacity>
            <dd:Unit>bytes</dd:Unit>
        </dd:Capacity>
    </xdm:Component>

    <xdm:Component id="dev1350" componentType="digitalStorage">
        <dd:DigitalStorageTypeEnum>ram</dd:DigitalStorageTypeEnum>
        <dd:Capacity>
            <dd:MaxCapacity>1040187392</dd:MaxCapacity>
            <dd:Unit>bytes</dd:Unit>
        </dd:Capacity>
    </xdm:Component>
</xdm:ComponentGroup>  

我为命名空间添加了一些虚拟网址,但您可以使用合法的网址。

然后,使用XPath获取各种组件,您可以加载文件并使用...

输出
    <?php
    error_reporting ( E_ALL );
    ini_set ( 'display_errors', 1 );

    $xml = simplexml_load_file('NewFile.xml');
    $xml->registerXPathNamespace("xdm", "http://www.hp.com/schemas/imaging/con/xdm/1.1/");
    $xml->registerXPathNamespace("dd", "http://www.hp.com/schemas/imaging/con/dictionaries/1.0/");
    $components = $xml->xpath("//xdm:Component");
    foreach ($components as $component){
        $digitalStorageTypeEnum = $component->xpath("descendant::dd:DigitalStorageTypeEnum/text()")[0];
        echo $component['id']."-". $digitalStorageTypeEnum.PHP_EOL;
    }

这会在命名空间中注册它们在XPath表达式中引用它们。因此,它首先查找所有<xdm:Component>元素,然后在其中获取dd:DigitalStorageTypeEnum元素。虽然text()只是一段文字,xpath总是会返回一个数组,所以只需将第一个结果作为内容。

输出:

dev1300-harddisk
dev1350-ram