복붙노트

SimpleXML : 특정 속성 값을 갖는 요소 선택하기

PHP

SimpleXML : 특정 속성 값을 갖는 요소 선택하기

XML 문서에서 동일한 이름을 가진 요소가 있지만 속성의 값은 어떤 데이터 유형인지 정의하고 문서에서 특정 값을 갖는 모든 요소를 ​​선택하려고합니다. XPath를 사용해야합니까 (그렇다면 올바른 구문을 제안 할 수 있습니까?) 아니면보다 세련된 솔루션이 있습니까?

다음은 XML 예제입니다.

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

그리고 모든 태그의 내용을 선택하고 싶습니다. 의 하위 항목은 누구입니까?

추신 : 나는 PHP를 사용하여 Netflix API와 인터페이스를 시도하고 있습니다. - 이것은 내 질문에 대해 중요하지 않아야합니다. 그러나 그렇게하기위한 좋은 / 좋은 방법을 제안하고 싶다면, 나는 모든 귀입니다.

해결법

  1. ==============================

    1.이 XPath를 사용해보십시오.

    이 XPath를 사용해보십시오.

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

    그래서:

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

    object가 문서의 루트가 아닌 경우 // object / data [@ type = "me"]를 대신 사용하십시오.

  2. ==============================

    2.나는 방금이 일을 할 수있는 기능을 만들었습니다. 그것은 단지 첫 번째 결과를 잡는다. 귀하의 마일리지가 다를 수 있습니다.

    나는 방금이 일을 할 수있는 기능을 만들었습니다. 그것은 단지 첫 번째 결과를 잡는다. 귀하의 마일리지가 다를 수 있습니다.

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

    용법:

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

    (아래 XML을 위해)

    <Root><Customer type="human"><Name>Sam Jones</name></Customer></Root>
    
  3. from https://stackoverflow.com/questions/992450/simplexml-selecting-elements-which-have-a-certain-attribute-value by cc-by-sa and MIT license