복붙노트

SimpleXML에서 @attribute에 액세스하기

PHP

SimpleXML에서 @attribute에 액세스하기

내 SimpleXML 객체의 @attribute 섹션에 액세스하는 데 문제가 있습니다. 내가 전체 개체를 var_dump 할 때 올바른 출력을 얻었고 나머지 개체 (중첩 된 태그)를 var_dump 할 때 올바른 출력을 얻을 수 있었지만 문서와 var_dump $ xml-> OFFICE -> { '@attributes'}, 첫 번째 var_dump가 출력 할 속성이 있음을 분명히 보여 주지만 빈 객체를 얻습니다.

누구나 내가 뭘 잘못하고 있는지 / 내가이 일을 할 수있는 방법을 아는가?

해결법

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

    1.XML 노드에서 attributes () 함수를 호출하여 XML 요소의 속성을 가져올 수 있습니다. 그런 다음 함수의 반환 값을 var_dump 할 수 있습니다.

    XML 노드에서 attributes () 함수를 호출하여 XML 요소의 속성을 가져올 수 있습니다. 그런 다음 함수의 반환 값을 var_dump 할 수 있습니다.

    php.net에서 더 많은 정보보기 http://php.net/simplexmlelement.attributes

    해당 페이지의 예제 코드 :

    $xml = simplexml_load_string($string);
    foreach($xml->foo[0]->attributes() as $a => $b) {
        echo $a,'="',$b,"\"\n";
    }
    
  2. ==============================

    2.이 시도

    이 시도

    $xml->attributes()->Token
    
  3. ==============================

    3.

    $xml = <<<XML
    <root>
    <elem attrib="value" />
    </root>
    XML;
    
    $sxml = simplexml_load_string($xml);
    $attrs = $sxml->elem->attributes();
    echo $attrs["attrib"]; //or just $sxml->elem["attrib"]
    

    SimpleXMLElement :: 특성을 사용하십시오.

    사실, SimpleXMLElement get_properties 핸들러는 큰 시간을 차지합니다. "@attributes"라는 속성이 없으므로 $ sxml-> elem -> { "@ attributes"} [ "attrib"]를 수행 할 수 없습니다.

  4. ==============================

    4.아래처럼 @attributes를 얻기 위해 여러 번 사용 했었습니다. 조금 길었습니다.

    아래처럼 @attributes를 얻기 위해 여러 번 사용 했었습니다. 조금 길었습니다.

    $att = $xml->attributes();
    echo $att['field'];
    

    좀 더 쉬워야하며 한 번에 한 형식으로 만 속성을 가져올 수 있습니다.

    $xml['field'];
    

    다른 대안은 다음과 같습니다.

    $xml->attributes()->{'field'};
    
    $xml->attributes()->field;
    $xml->{"@attributes"}->field;
    $xml->attributes('field');
    $xml->attributes()['field'];
    $xml->attributes->['field'];
    
  5. ==============================

    5.할 수있는 일은 다음과 같습니다.

    할 수있는 일은 다음과 같습니다.

    echo $xml['token'];
    
  6. ==============================

    6.하지만 이러한 속성 목록을 찾고 있다면 XPath는 친구가 될 것입니다.

    하지만 이러한 속성 목록을 찾고 있다면 XPath는 친구가 될 것입니다.

    print_r($xml->xpath('@token'));
    
  7. ==============================

    7.불행히도 나는 PHP 5.5의 고유 한 빌드 (Gentoo와 잠시 붙어있다)를 가지고 있는데, 내가 발견 한 것은

    불행히도 나는 PHP 5.5의 고유 한 빌드 (Gentoo와 잠시 붙어있다)를 가지고 있는데, 내가 발견 한 것은

     $xml->tagName['attribute']
    

    효과가있는 유일한 해결책이었습니다. 나는 'Right & Quick'형식을 포함하여 위의 Bora의 모든 방법을 시도했지만 모두 실패했습니다.

    이것이 가장 쉬운 형식이라는 사실은 더할 나위없이 좋았지 만 다른 사람들이 일했던 모든 형식을 시도해 보는 것이 정신이 없다고 생각하는 것을 즐기지 못했습니다.

    Njoy는 가치가 무엇인지 (고유 한 빌드를 언급 했나요?).

  8. ==============================

    8.Simplexml_load_file ($ file)의 결과를 JSON 구조로 변환하고 다시 디코딩하는 데 도움이되었습니다.

    Simplexml_load_file ($ file)의 결과를 JSON 구조로 변환하고 다시 디코딩하는 데 도움이되었습니다.

    $xml = simplexml_load_file("$token.xml");
    $json = json_encode($xml);
    $xml_fixed = json_decode($json);
    
    $try1 = $xml->structure->{"@attributes"}['value'];
    print_r($try1);
    
    >> result: SimpleXMLElement Object
    (
    )
    
    $try2 = $xml_fixed->structure->{"@attributes"}['value'];
    print_r($try2);
    
    >> result: stdClass Object
    (
        [key] => value
    )
    
  9. from https://stackoverflow.com/questions/1652128/accessing-attribute-from-simplexml by cc-by-sa and MIT license