在PHP中组合来自2个XML对象的值

时间:2010-07-30 18:17:27

标签: php xml parsing object

......好吧,实际上我有一个看起来像这样的对象:

object(AleParserXMLElement)#39 (4) {
  ["name:private"]=>
  string(6) "rowset"
  ["data:private"]=>
  object(SimpleXMLElement)#42 (2) {
    ["@attributes"]=>
    array(3) {
      ["name"]=>
      string(6) "skills"
      ["key"]=>
      string(6) "typeID"
      ["columns"]=>
      string(36) "typeID,skillpoints,level,unpublished"
    }
    ["row"]=>
    array(185) {
      [0]=>
      object(SimpleXMLElement)#70 (1) {
        ["@attributes"]=>
        array(3) {
          ["typeID"]=>
          string(4) "3377"
          ["skillpoints"]=>
          string(6) "256000"
          ["level"]=>
          string(1) "5"
        }
      }
      [1]=>
      object(SimpleXMLElement)#23 (1) {
        ["@attributes"]=>
        array(3) {
          ["typeID"]=>
          string(5) "20342"
          ["skillpoints"]=>
          string(1) "0"
          ["level"]=>
          string(1) "0"
        }
      }
      [2]=>
      object(SimpleXMLElement)#9 (1) {
        ["@attributes"]=>
        array(3) {
          ["typeID"]=>
          string(5) "12096"
          ["skillpoints"]=>
          string(1) "0"
          ["level"]=>
          string(1) "0"
        }
      }
      //etc.
    }
  }
  ["children:private"]=>
  NULL
  ["rows:private"]=>
  NULL
}

我有一个XML文件,你可以在这里看到:

link

我想从第一个对象中显示这些技能,但是将该typeID值替换为该xml文件中的typeName
正如你所想,我根本不知道怎么做:)请帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用DOMDocuent和DOMXpath来获取名称。像//row[@typeID="ID HERE"]/@typeName这样的XPath表达式将执行:

$d = new DOMDocument;
$d->load(...);
$xp = new DOMXpath($d);
$name = $xp->query('//row[@typeID="ID HERE"]/@typeName');
echo $name->item(0)->value;

关于如何进行替换,请参阅您正在使用的XML解析器的文档(我看到一个包含SimpleXMLElement的AleParser,但不知道那是什么)。