Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何解析格式不正确的XML文件_Php_Xml_Simplexml - Fatal编程技术网

Php 如何解析格式不正确的XML文件

Php 如何解析格式不正确的XML文件,php,xml,simplexml,Php,Xml,Simplexml,我无法解析XML文件。如何在循环中生成以下代码。 我可以用SimpleXML做这个吗 <Variants> <Definition>Color=Black</Definition> <Code/> <Image>1744.jpg</Image> <Stock>1</Stock> <Price>3385.5933</Price> <CurrencyID>1</C

我无法解析XML文件。如何在循环中生成以下代码。 我可以用SimpleXML做这个吗

<Variants>
<Definition>Color=Black</Definition>
<Code/>
<Image>1744.jpg</Image>
<Stock>1</Stock>
<Price>3385.5933</Price>
<CurrencyID>1</CurrencyID>
<Suffix>TL</Suffix>
<Definition>Color=White</Definition>
<Code/>
<Image>1741.jpg</Image>
<Stock>1</Stock>
<Price>3385.5933</Price>
<CurrencyID>1</CurrencyID>
<Suffix>TL</Suffix>
</Variants>
用于查看实际的SimpleXML结构,并发现可以在何处迭代以下内容:

SimpleXMLElement Object
(
    [Definition] => Array
        (
            [0] => Color=Black
            [1] => Color=White
        )

    [Code] => Array
        (
            [0] => SimpleXMLElement Object
                (
                )

            [1] => SimpleXMLElement Object
                (
                )

        )

    [Image] => Array
        (
            [0] => 1744.jpg
            [1] => 1741.jpg
        )

    [Stock] => Array
        (
            [0] => 1
            [1] => 1
        )

    [Price] => Array
        (
            [0] => 3385.5933
            [1] => 3385.5933
        )

    [CurrencyID] => Array
        (
            [0] => 1
            [1] => 1
        )

    [Suffix] => Array
        (
            [0] => TL
            [1] => TL
        )
 )
在最简单的情况下,您可以迭代每个属性:

foreach ($xmlobject->Definition as $i=>$item) {
    echo " $item ";
}
如果要将排列结构重新转换为组,请使用:

foreach (json_decode(json_encode($xmlobject)) as $key=>$items) {
    foreach ($items as $i=>$entry) {
        $out["$i"]["$key"] = $entry;
    }
}
这将给你:

Array
(
    [0] => Array
        (
            [Definition] => Color=Black
            [Code] => stdClass Object
                (
                )    
            [Image] => 1744.jpg
            [Stock] => 1
            [Price] => 3385.5933
            [CurrencyID] => 1
            [Suffix] => TL
        )

    [1] => Array
        (
            [Definition] => Color=White
            [Code] => stdClass Object
                (
                )    
            [Image] => 1741.jpg
            [Stock] => 1
            [Price] => 3385.5933
            [CurrencyID] => 1
            [Suffix] => TL
        )
)

您的XML完全有效,请按以下方式执行:

$xml = simplexml_load_string($x); // assuming XML in $x
foreach ($xml->Definition as $def) echo "$def<br />";
$xml=simplexml\u load\u string($x);//假设XML为$x
foreach($xml->定义为$def)回显“$def
”;
看到它工作了吗


您的代码失败,因为
是根目录,由
$xml

表示。您是否确实尝试过使用SimpleXML?它在数组中很好地收集重复出现的元素。请展示您的编码尝试并解释您的困难。我已经添加了我编写的代码。我做错了什么@Mariother不是一个格式不好的XML文件。如果它的格式不好,那么它就不是XML。您的XML可能设计得很糟糕,但这与格式错误并不相同。(1)-您发布的XML是有效的。(2) 到底是什么不起作用?错误消息?收到的输出与期望的输出?
$xml = simplexml_load_string($x); // assuming XML in $x
foreach ($xml->Definition as $def) echo "$def<br />";