如何从PHP simplexml_load_string访问数组的NAMED部分

时间:2014-03-14 13:41:34

标签: php xml-parsing

好的,这就是我必须使用的XML ..

 <ALL_STOCK>
  <SINGLE_ITEM>
   <SKU>1234</SKU>
   <USER_DEFINED NAME="Brand" TYPE="LIST" />
   <USER_DEFINED NAME="Theme" TYPE="LIST" />
   <USER_DEFINED NAME="Colour" TYPE="LIST" />Black</USER_DEFINED>
  </SINGLE_ITEM>
  <SINGLE_ITEM>
   <SKU>5678</SKU>
   <USER_DEFINED NAME="Brand" TYPE="LIST" />
   <USER_DEFINED NAME="Theme" TYPE="LIST" />
   <USER_DEFINED NAME="Colour" TYPE="LIST" />Red</USER_DEFINED>
  </SINGLE_ITEM>
 </ALL_STOCK>

这是我的PHP代码简化..

$extractedxml = simplexml_load_string($result);
 foreach ($extractedxml as $eachproduct):
  echo $eachproduct->SKU;
  echo $eachproduct->USER_DEFINED['Colour'];
 endforeach;

我试图回应SKU&amp;每种产品的颜色。我可以轻松访问SKU,上面的代码适用于此。如何根据对象&#39; NAME&#39;来访问对象?参数? 如果我只是使用

      echo $eachproduct->USER_DEFINED;

我从第一个USER_DEFINED条目中返回值Brand我不想通过索引号访问它,因为这些可能会在循环中发生变化?非常感谢提前!

更多信息:

以下是单个产品的输出&#39; var_dump($each_product);

object(SimpleXMLElement)[56]
  public '@attributes' => 
    array (size=2)
      'NAME' => string 'Brand' (length=5)
      'TYPE' => string 'TEXT' (length=4)

    object(SimpleXMLElement)[58]
      public '@attributes' => 
        array (size=2)
          'NAME' => string 'Theme' (length=5)
          'TYPE' => string 'LIST' (length=4)

    object(SimpleXMLElement)[59]
      public '@attributes' => 
        array (size=2)
          'NAME' => string 'Colour' (length=6)
          'TYPE' => string 'LIST' (length=4)
           string '"Black"' (length=5)

1 个答案:

答案 0 :(得分:1)

像这样使用xpath

foreach ( $extractedxml as $eachproduct ) {
    $colour = $eachproduct->xpath('USER_DEFINED[@NAME="Colour"]')[0];

    // returns actual value of SimpleXMLElement Object
    echo (string) $colour;
}

同时从XML中删除错误:

<USER_DEFINED NAME="Colour" TYPE="LIST" >Black</USER_DEFINED>