XML :네임 스페이스와
<?xml version="1.0"?>
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_9069a2d7-491f-49ca-a13f-96c5bad39b14" IssueInstant="2010-04-06T16:27:34Z" Version="2.0">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://ssl.perquisite.net/memberweb/federation</saml:Issuer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#_9069a2d7-491f-49ca-a13f-96c5bad39b14">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="#default saml ds xs xsi"/>
</Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>QpoCI6jZFhQi+PuYM6UaFBL9KEU=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>X8X6qSUDKa3h3+/girXCeOVxo8=</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIIB2...CieOpEo35g==</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">654d2065-6eed-401f-bf6d-a181117a5fb8</saml:NameID>
</saml:Subject>
<saml:Conditions NotBefore="2010-04-06T16:27:04Z" NotOnOrAfter="2010-04-06T16:28:04Z"/>
<saml:AuthnStatement AuthnInstant="2010-04-06T16:27:34Z">
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:X509</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
</saml:Assertion>
번호 :
$xml
은 상기 XML 설정된다. 서명 노드와 XML의 어린이 : 나는 시그 제거 할이 시점에서
$sxml = new SimpleXMLElement($xml);
$sxml->registerXPathNamespace('saml', 'urn:oasis:names:tc:SAML:2.0:assertion');
$sxml->registerXPathNamespace('sig', 'http://www.w3.org/2000/09/xmldsig#');
$signodes = $sxml->xpath('/saml:Assertion/sig:Signature');
. 나는 시도했다 :
$node = dom_import_simplexml($signodes[0]);
$node->parentNode->removeChild($node);
과 :
foreach($signodes as $item) {
$node = dom_import_simplexml($item);
$node->parentNode->removeChild($node);
}
과 :
unset($signodes);
를 실행 한 다음,
:foreach($signodes as $node) {
unset($node);
}
한 다음에 XML을 다시 받고
$Canonical = $sxml->asXML();
위의 결과는 모두 결과 XML 에 아무런 영향을 미치지 않지만 오류는 발생하지 않습니다.
누구나 단서가 있습니까?
나에게 맞는 것 같습니다. 나는 그것을 국부적으로 복제하려고 노력할 것이다. 질문은 upvote를 얻습니다. 왜냐하면 실제로 시도한 것을 정확하게 게시했기 때문에 질문을 올리며 여기서 희귀 한 질문을 던졌습니다. – mkaatman
dom_import_simplexml 및 removechild를 사용하는 예제가 여기 나와 있습니다. http://codepad.org/b4emqwCA – mkaatman
감사합니다 mkaatman, 코드를 읽기 쉽도록 단순화 했으므로 실제 코드와 관련이 있다고 가정합니다. 변수의 범위가 "되돌릴"수 있습니다. –