0

重複の可能性:
xml ファイルのノードとノードの値を CRUD する単純なプログラム

この XML フィードから特定の属性を取得するにはどうすればよいですか?

例 - このような行を使用して他の XML の詳細を取得していますが、特定の属性を取得するためにそれを変更する方法がわかりません。

$mainPropertyDetails = $mainPropertyUrl->Attributes->attribute;

属性:

<Attributes>
<Attribute>
<Name>bedrooms</Name>
<DisplayName>Bedrooms</DisplayName>
<Value>4 bedrooms</Value>
</Attribute>
<Attribute>
<Name>bathrooms</Name>
<DisplayName>Bathrooms</DisplayName>
<Value>2 bathrooms</Value>
</Attribute>
<Attribute>
<Name>property_type</Name>
<DisplayName>Property type</DisplayName>
<Value>House</Value>
</Attribute>
4

1 に答える 1

1

SimpleXMLこれらのノードを配列として実装します。これを行うとvar_dump()、次のように表示されます。

// Dump the whole Attributes array
php > var_dump($xml->Attributes);

object(SimpleXMLElement)#6 (1) {
  ["Attribute"]=>
  array(3) {
    [0]=>
    object(SimpleXMLElement)#2 (3) {
      ["Name"]=>
      string(8) "bedrooms"
      ["DisplayName"]=>
      string(8) "Bedrooms"
      ["Value"]=>
      string(10) "4 bedrooms"
    }
    [1]=>
    object(SimpleXMLElement)#5 (3) {
      ["Name"]=>
      string(9) "bathrooms"
      ["DisplayName"]=>
      string(9) "Bathrooms"
      ["Value"]=>
      string(11) "2 bathrooms"
    }
    [2]=>
    object(SimpleXMLElement)#3 (3) {
      ["Name"]=>
      string(13) "property_type"
      ["DisplayName"]=>
      string(13) "Property type"
      ["Value"]=>
      string(5) "House"
    }
  }
}

したがって、配列インデックスによって特定のものにアクセスするだけの問題です。

// Get the second Attribute node
var_dump($xml->Attributes[0]->Attribute[1]);

object(SimpleXMLElement)#6 (3) {
  ["Name"]=>
  string(9) "bathrooms"
  ["DisplayName"]=>
  string(9) "Bathrooms"
  ["Value"]=>
  string(11) "2 bathrooms"
}

子の値に基づいて Attribute ノードを取得します。

を使用すると、子のテキスト値に基づいxpath()て親ノードを照会できます。Attribute

// Get the Attribute containing the Bathrooms DisplayName
// Child's text value is queried via [AttrName/text()="value"]
var_dump($xml->xpath('//Attributes/Attribute[DisplayName/text()="Bathrooms"]');

array(1) {
  [0]=>
  object(SimpleXMLElement)#6 (3) {
    ["Name"]=>
    string(9) "bathrooms"
    ["DisplayName"]=>
    string(9) "Bathrooms"
    ["Value"]=>
    string(11) "2 bathrooms"
  }
}
于 2012-10-29T00:44:26.083 に答える