Simple XML을 사용하여 XML 소스를로드하고 모든 노드가있는 기존 노드를 복제 한 다음 XML을 렌더링하기 전에이 새 노드의 특성을 사용자 정의해야합니다. 어떠한 제안?PHP - 단순 XML을 사용하여 XML 노드 중복
답변
SimpleXML은 이것을 수행 할 수 없으므로 DOM을 사용해야합니다. 좋은 소식은 DOM과 SimpleXML이 같은 동전 인 libxml의 양면이라는 것입니다. 따라서 SimpleXML을 사용하든 DOM을 사용하든 동일한 트리에서 작업하고 있습니다. 다음은 예입니다 :
$thing = simplexml_load_string(
'<thing>
<node n="1"><child/></node>
</thing>'
);
$dom_thing = dom_import_simplexml($thing);
$dom_node = dom_import_simplexml($thing->node);
$dom_new = $dom_thing->appendChild($dom_node->cloneNode(true));
$new_node = simplexml_import_dom($dom_new);
$new_node['n'] = 2;
echo $thing->asXML();
당신이에서와로 변환하지 않고 직접 DOM의 방법을 사용할 수 있습니다 SimpleXML을의 확장이 많은, 당신은 SimpleDOM을 시도 할 수 있습니다 그런 종류의를 수행하는 경우 DOM 개체.
include 'SimpleDOM.php';
$thing = simpledom_load_string(
'<thing>
<node n="1"><child/></node>
</thing>'
);
$new = $thing->appendChild($thing->node->cloneNode(true));
$new['n'] = 2;
echo $thing->asXML();
SimpleXML을 사용하면 가장 좋은 방법은 해결 방법입니다. 그것은 꽤 보보,하지만 그것을 작동합니다 : 그것은 SimpleXML을 거기 될 것 같지 않습니다 기능에 대한 해결 방법입니다 때문에
이// Strip it out so it's not passed by reference
$newNode = new SimpleXMLElement($xml->someNode->asXML());
// Modify your value
$newnode['attribute'] = $attValue;
// Create a dummy placeholder for it wherever you need it
$xml->addChild('replaceMe');
// Do a string replace on the empty fake node
$xml = str_replace('<replaceMe/>',$newNode->asXML(),$xml->asXML());
// Convert back to the object
$xml = new SimpleXMLElement($xml); # leave this out if you want the xml
, 당신은 내가이 어떤 객체 참조를 깰 것이라고 기대하는 점에 유의해야합니다 당신 있다면이 시점까지 정의했다.
이 대답을 너무 좋아해서 간단합니다. '$ newNode-> asXML()'이 원시 XML 조각 대신 XML 헤더를 작성하고 있었기 때문에 대답을 약간 수정해야했습니다. $ domNode = dom_import_simplexml ($ newNode); $ xml = str_replace ('
- 1. PHP SimpleXML을 사용하여 XML 노드 값을 검색
- 2. PHP XML 노드 삭제
- 3. PHP XML 편집 CDATA 노드
- 4. XSLT를 사용하여 XML 노드 재구성
- 5. XSLT를 사용하여 XML 노드 병합
- 6. 노드 번호를 사용하여 XML 쿼리하기
- 7. XML을 통한 노드 반복 :: LibXML
- 8. jquery를 사용하여 중복 데이터를 사용하여 XML을 통해 트래버스
- 9. 오라클 XML을 생성 노드 널
- 10. JAXB를 사용하여 XML을 파싱하는 XML
- 11. Grails : 변수를 사용하여 XML 노드 만들기
- 12. PHP 용 ORM (단순)
- 13. SSIS를 사용하여 Xml 열로 XML 노드 가져 오기
- 14. XML 노드 값을 기반으로 레코드에서 XML을 업데이트하는 SQL 업데이트 쿼리?
- 15. Groovy에서 일반 XML을 단순 XML로 구문 분석 할 수 있습니까?
- 16. xml 파일의 노드 이름을 C#
- 17. 파이썬에서 반복적으로 XML 노드 작성하기
- 18. SQL 서버에서 XML을 수정하여 루트 노드 추가
- 19. PHP : 간단한 XML을 사용해야합니다!
- 20. 빈 문자열이있는 addChild - 중복 노드
- 21. 는 XML을 읽고 PHP
- 22. PHP : Perticular XML 노드 유형에서 텍스트 배열 가져 오기?
- 23. Perl의 XML :: Simple을 사용하여 XML을 생성하려면 어떻게해야합니까?
- 24. XML을 사용하여 Perl로 XML 구문 분석하기
- 25. XML 스키마를 사용하여 XML을 어떻게 제한합니까?
- 26. Xml PHP를 사용하여 요소 노드 추가
- 27. Java SE를 사용하여 XML 노드 제거
- 28. LINQ를 사용하여 임의의 XML 노드 선택
- 29. DOM 노드 뒤에서 약간의 XML을 얻는 방법
- 30. LINQ-to-XML : 특정 노드 값 선택
+1 DOM을 추천합니다. 나는 simpleXML에 많은 문제가있다. SimpleXML을 사용하지 마십시오. DOM은 훨씬 강력하고 사용하기가 어렵지 않습니다. – Keyo
이것도 중요하므로주의해야합니다. 내 스크립트를 DOM으로 다시 작성하는 데 30 분을 보내는 것은 유감스럽지 않습니다. 이제는 훨씬 더 직선적이며 유지하기가 쉽습니다. – ivkremer