1

以下のXMLから、親がName=SNの属性を持つ「TestTwo」というテキストを取得できません。SimpleXMLElementを取得することはできますが、子を取得する方法がわかりません。

「TestTwo」というテキストを返す最良の方法は何ですか?

ありがとうございました!

$xml = simplexml_load_string($XMLBELOW);
$xml->registerXPathNamespace('s','urn:oasis:names:tc:SAML:2.0:assertion');
$result = $xml->xpath("//s:Attribute[@Name='sn']");
var_dump( $result);

$XMLBELOW = <<<XML
<?xml version="1.0" ?>
<saml2:Assertion ID="SAML-4324423" IssueInstant="2012-09-24T17:49:39Z" Version="2.0" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
  <saml2:Issuer>
    Test
  </saml2:Issuer>
  <saml2:Subject>
    <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" NameQualifier="Test">
      Tester
    </saml2:NameID>
    <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
      <saml2:SubjectConfirmationData NotBefore="2012-09-24T17:48:39Z" NotOnOrAfter="2012-09-24T17:51:39Z"/>
    </saml2:SubjectConfirmation>
  </saml2:Subject>
  <saml2:Conditions NotBefore="2012-09-24T17:48:39Z" NotOnOrAfter="2012-09-24T17:51:39Z"/>
  <saml2:AuthnStatement AuthnInstant="2012-09-24T17:49:39Z" SessionNotOnOrAfter="2012-09-24T17:51:39Z">
    <saml2:SubjectLocality Address="105.57.487.48"/>
    <saml2:AuthnContext>
      <saml2:AuthnContextClassRef>
        urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified
      </saml2:AuthnContextClassRef>
    </saml2:AuthnContext>
  </saml2:AuthnStatement>
  <saml2:AttributeStatement>
    <saml2:Attribute Name="sn" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
      <saml2:AttributeValue>
        TestTwo
      </saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute Name="departmentNumber" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
      <saml2:AttributeValue>
        OPERS
      </saml2:AttributeValue>
    </saml2:Attribute>
  </saml2:AttributeStatement>
</saml2:Assertion>
XML;
4

1 に答える 1

1

これはどう?

$result = $xml->xpath("//s:Attribute[@Name='sn']/*");
var_dump( $result[0]->__toString() ); // or just `echo $result[0];`

更新された式により、ターゲット要素のすべての子が取得されます(必要に応じて、結果セットをさらに絞り込むことができます)。

メソッドは配列を返すのでxpath()、その要素のいくつかを取得し、これらのオブジェクトで「toString」を呼び出してテキストを取得する必要があります。ここで私は最初のものでやりました。

于 2012-09-25T15:32:10.657 に答える