SimpleXML: A Certain Özellik Değeri var Elemanları seçilmesi

2 Cevap php

XML belgesinde, ben aynı adı paylaşan öğeleri var, ama bir niteliğin değeri olduğunu ne tür verileri tanımlar, ve ben belgeden belli bir değere sahip olan tüm öğeleri seçmek istiyorum. Ben (ve eğer öyleyse, size doğru sözdizimi hatırlatıyoruz) XPath kullanmanız gerekir ya da daha zarif bir çözüm var mı?

İşte bazı örnek XML bulunuyor:

<object>
  <data type="me">myname</data>
  <data type="you">yourname</data>
  <data type="me">myothername</data>
</object>

Ve ben <object> kim türü me mi tüm <data> etiketleri çocukların içeriğini seçmek istiyorum.

PS - PHP kullanarak Netflix API için çalışıyorum - bu benim soru için önemli değil, ama bunu yapmak için bir iyi / iyi bir yol önermek istiyorum, ben bütün kulaklar değilim.

2 Cevap

Bu XPath deneyin:

/object/data[@type="me"]

Yani:

$myDataObjects = $simplexml->xpath('/object/data[@type="me"]');

Ve eğer object yerine //object/data[@type="me"] kullanın, belgenin kök değildir.

Ben sadece benim için bunu yapmak için bir işlev yaptı; sadece olsa ilk sonuç kapmak. Sizin kilometre değişebilir.

function query_attribute($xmlNode, $attr_name, $attr_value) {
  foreach($xmlNode as $node) { 
    switch($node[$attr_name]) {
      case $attr_value:
        return $node;
    }
  }
}

Kullanımı:

echo query_attribute($MySimpleXmlNode->Customer, "type", "human")->Name;

(Aşağıdaki XML için)

<Root><Customer type="human"><Name>Sam Jones</name></Customer></Root>