2

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->name as $name)

到 foreach($xml->lesson->name as $name)

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

它打印 children()

已解决:$text = $xml->lesson->children(); 回声$文本;

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

4

2 回答 2

1

编辑:这部分与问题错字有关。 如果您直接从编辑位置复制了 xml,那么问题的一部分可能是它格式错误。您有一个开口<lessons>,但您似乎错误地尝试使用</lesson>.

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

于 2012-10-26T04:00:39.927 回答
1

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

-> 您必须正确关闭课程标签。因为您输入的是</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);
?>

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

于 2012-10-26T04:12:36.257 回答