Xml PHP获取属性及其子值

时间:2012-10-26 03:47:10

标签: php xml children

XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<lessons>
    <lesson level="1" course="2">
                 <name type="Dog" category="Animals">Dog name</name>
          </lesson>
</lessons>

我希望保存这样的值:

$type = "Dog";
$category = "Animals";
$name = "dog name";

这就是我所做的:

    foreach($xml->name as $name){
        $type = $name['type'];
        $category = $name['category'];

        echo "Type: $type Category: $category<br>";
        // AND TO get the text, haven't figuered it out yet.. <name ..="" ..="">text</name>
    }

但它不起作用。不要输出任何错误。有什么想法吗?

编辑: 好。我改变了foreach($ xml-&gt;名称为$ name)

to foreach($ xml-&gt; lesson-&gt; name as $ name)

所以我得到了属性的值。但现在我不知道如何获得孩子们的价值。 我试过这个:$ xml-&gt; lesson-&gt; children()

打印children()

已解决:$ text = $ xml-&gt; lesson-&gt; children(); echo $ text;

问题是:我在其他代码中使用utf-8但没有更改它。

2 个答案:

答案 0 :(得分:1)

编辑:此部分与问题拼写错误有关。 如果您直接从编辑它的位置复制xml,则部分问题可能是格式错误。您有一个空缺<lessons>,但您似乎错误地尝试使用</lesson>关闭它。

此外,根据您的根节点设置,->name可能是也可能不是$ xml对象的子节点。你可以发布一个var_dump()并获得一些线索吗?

答案 1 :(得分:1)

我认为,你的xml存在一些问题。

- &GT;您必须正确关闭课程标记。因为您输入了</lesson>(请参阅最后一行)而不是</lessons>。如果您启动任何标记,则在关闭时应使用相同的标记名称。

您可以使用此代码从xml中提取值

<?php

$xmlstring='<lessons>
    <lesson level="1" course="2">
                 <name type="Dog" category="Animals">Dog name</name>
          </lesson>
</lessons>';

$xml = simplexml_load_string($xmlstring);
$ATTRIBUTE=array();
$counter = 0;
foreach($xml->children() as $key=>$child)
  {
    $counter++;
    $ATTRIBUTE[$counter]["type"]=$child->name->attributes()->type;
    $ATTRIBUTE[$counter]["category"]=$child->name->attributes()->category;
    $ATTRIBUTE[$counter]["value"]= $child->name;
  }

echo "<pre>";
print_r($ATTRIBUTE);
?>

这里你将获得数组中的所有内容。所以你可以根据你的要求获取。