> 백엔드 개발 > PHP 튜토리얼 > 배열 객체에 대한 XML

배열 객체에 대한 XML

WBOY
풀어 주다: 2016-07-25 09:05:07
원래의
1137명이 탐색했습니다.
XML 내용을 파싱한 후 해당 배열 객체를 반환하며, 반환 유형은 매개변수 설정[array, JSON]을 통해 설정할 수 있습니다. 기본값: 배열
simplexml_load_string을 기반으로 하기 때문에 네임스페이스가 있는 XML을 구문 분석하는 데 그다지 좋지 않고 네임스페이스 내용이 손실됩니다. 위의 테스트에서 얻은 결론은 이 문제를 해결합니다.
这个可以满足一般的使用需求
  1. function toJSON()
  2. {
  3. require_once '../classes/XmlToArray.php';
  4. $XML=<<
  5. "-//Apache Software Foundation//DTD Struts 구성 2.0//EN"
  6. "http://struts.apache.org/dtds/struts-2.0.dtd">
  7. < ;constant name="struts.objectFactory" value="spring"/>
  8. <패키지 이름="crm_employee" 확장= "struts-default" 네임스페이스="/emp">
  9. add.action
  10. /emp/add_suc.jsp
  11. /emp/list.jsp
  12. < ;result>delete.action
  13. /emp/delete_suc.jsp
  14. update.action
  15. /emp/edit_suc.jsp
  16. /emp/edit.jsp
  17. < !-- 여기에 작업 추가 -->
  18. XML;
  19. header("Content-type: text/html ; charset=utf-8") ;
  20. $xml_to_array = new XmlToArray();
  21. $xml_to_array->setXml($XML);
  22. // 当标签名与内置属性有冲突的时候可以自정의상关属성명, 一般其概况不需要设置
  23. //$xml_to_array->setAttributeAsName("attributeAsName")->setContentAsName("contentasName");
  24. $r = $xml_to_array->parseXml( true);
  25. print_r( $r ) ;
  26. }
  27. // 打印结果:
  28. {"struts":{"attributes":[],"content":"", "상수":{"속성":{"이름":"struts.objectFactory","값":"spring"},"content":""},"패키지":{"속성":{"이름" :"crm_employee","extends":"struts-default","namespace":"/emp"},"content":"","action":[{"attributes":{"name":"add" ,"class":"addBean","method":"add"},"content":"","result":[{"attributes":[],"content":"add.action"},{ "attributes":[],"content":"/emp/add_suc.jsp"}]},{"attributes":{"name":"list","class":"listBean","method":" list"},"content":"","result":{"attributes":[],"content":"/emp/list.jsp"}},{"attributes":{"name":"delete ","class":"deleteBean","method":"delete"},"content":"","result":{"attributes":[],"content":"/emp/delete_suc.jsp" }},{"속성":{"name":"update","class":"updateBean","method":"update"},"content":"","result":{"attributes": [],"content":"/emp/edit_suc.jsp"}},{"attributes":{"name":"edit","class":"editBean","method":"edit"}," content":"","result":{"attributes":[],"content":"/emp/edit.jsp"}}]}}}
  29. // 打印数组
  30. function toArray()
  31. {
  32. require_once '../classes/XmlToArray.php';
  33. $XML=<<< ;?xml version="1.0" 인코딩="UTF-8"?>
  34. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  35. "http://struts.apache.org/dtds/struts-2.0.dtd">
  36. <상수 name="struts.objectFactory" value="spring"/>
  37. add.action
  38. /emp/add_suc.jsp
  39. < ;result>/emp/list.jsp
  40. /emp/delete_suc.jsp
  41. update.action
  42. /emp/edit_suc.jsp
  43. < action name="edit" class="editBean" method="edit">
  44. /emp/edit.jsp
  45. XML;
  46. header("Content-type: text/html; charset=utf-8") ;
  47. $xml_to_array = new XmlToArray();
  48. $xml_to_array->setXml($XML);
  49. // 当标签名与内置属性有冲突的时候可以自정의상关属성명, 一般其概况不需要设置
  50. //$xml_to_array->setAttributeAsName("attributeAsName")->setContentAsName("contentasName");
  51. $r = $xml_to_array->parseXml( );
  52. print_r( $r ) ;
  53. }
  54. // 打印结果
  55. 배열
  56. (
  57. [struts] => 배열
  58. (
  59. [속성] => 배열
  60. (
  61. )
  62. [콘텐츠] =>
  63. [상수] => 배열
  64. (
  65. [속성] => 배열
  66. (
  67. [이름] => struts .objectFactory
  68. [값] => spring
  69. )
  70. [content] =>
  71. )
  72. [패키지] => 🎜> [속성] => 배열
  73. (
  74. [이름] => crm_employee
  75. [extends] => struts-default
  76. [네임스페이스] => /emp
  77. )
  78. [content] =>
  79. [action] => 배열
  80. (
  81. [0] => 배열
  82. (
  83. [속성] => 배열
  84. (
  85. [이름] => 추가
  86. [클래스] => addBean
  87. [메서드] => 추가
  88. )
  89. [내용] => ;
  90. [결과] => 배열
  91. (
  92. [0] => 배열
  93. (
  94. [속성] => 배열
  95. (
  96. )
  97. [내용] => 추가 .action
  98. )
  99. [1] => 배열
  100. (
  101. [속성] => 배열
  102. (
  103. )
  104. [내용] => /emp/add_suc.jsp
  105. )
  106. )
  107. )
  108. [1] => Array
  109. (
  110. [속성] => Array
  111. (
  112. [이름] => 목록
  113. [클래스] => listBean
  114. [메서드] => 목록
  115. )
  116. [내용] =>
  117. [결과] => 배열
  118. (
  119. [속성] => 배열
  120. (
  121. )
  122. [콘텐츠] => /emp/list.jsp
  123. )
  124. )
  125. [2] => Array
  126. (
  127. [속성] => Array
  128. (
  129. [이름] => 삭제
  130. [클래스] => deleteBean
  131. [메서드] => 삭제
  132. )
  133. [내용] =>
  134. [결과] => 배열
  135. (
  136. [속성] => 배열
  137. (
  138. )
  139. [콘텐츠] => /emp/delete_suc.jsp
  140. )
  141. )
  142. [3] => 배열
  143. (
  144. [속성] => 배열
  145. (
  146. [이름] => 업데이트
  147. [클래스] => updateBean
  148. [메서드] => 업데이트
  149. )
  150. [콘텐츠] =>
  151. [결과] => 배열
  152. (
  153. [속성] => 배열
  154. (
  155. )
  156. [content] => /emp/edit_suc.jsp
  157. )
  158. )
  159. [4] => Array
  160. (
  161. [속성] => Array
  162. (
  163. [이름] => edit
  164. [class] => editBean
  165. [메서드] => edit
  166. )
  167. [내용] =>
  168. [결과] => 배열
  169. (
  170. [속성] => 배열
  171. (
  172. )
  173. [콘텐츠] => /emp/edit.jsp
  174. )
  175. )
  176. )
  177. )
  178. )
  179. )
复代码
  1. /**
  2. * 생성자: JetBrains PhpStorm.
  3. * 사용자: hedgehog
  4. * 날짜: 12-5-9
  5. * 시간: 下午4:37
  6. * 이 템플릿을 변경하려면 파일 | 설정 | 파일 템플릿.
  7. */
  8. class XmlToArray
  9. {
  10. private $xml;
  11. private $contentAsName= "content" ;
  12. private $attributesAsName="attributes";
  13. private $xml_array = array();
  14. public function setXml( $xmlstr )
  15. {
  16. $this-> ;xml = $xmlstr ;
  17. $this 반환 ;
  18. }
  19. 공개 함수 setContentAsName( $name )
  20. {
  21. $this->contentAsName = $name ;
  22. return $this ;
  23. }
  24. 공개 함수 setAttributeAsName( $name )
  25. {
  26. $this->attributesAsName = $name ;
  27. return $this ;
  28. }
  29. 비공개 함수 createXMLArray( $node,&$parent_node,$node_index =0)
  30. {
  31. $node_attrbutes= array() ;
  32. $node_name = $node->getName() ;
  33. $attributes = $node->attributes() ;
  34. $children = $node->children () ;
  35. // 遍历节点上的所有属性
  36. foreach( $attrname으로서의 $attributes => $attrvalue )
  37. {
  38. $attrvalue = ( string )$attrvalue ;
  39. $node_attrbutes[ $attrname ] = Trim( $attrvalue ) ;
  40. }
  41. $content = "";
  42. if( count($children) == 0 )
  43. {
  44. $content = ( 문자열 ) $node ;
  45. }
  46. $node_array = 배열(
  47. $this->attributesAsName =>$node_attrbutes ,
  48. $this->contentAsName => Trim( $content )
  49. );
  50. // 设置层级关系
  51. if( !isset( $parent_node[ $node_name ] ) )
  52. {
  53. $is = count( $parent_node ) ;
  54. if( !isset( $parent_node[ $this->attributesAsName ] ) && count( $parent_node ) > 0 )
  55. {
  56. $last_index = count( $parent_node ) -1 ;
  57. $parent_node =& $parent_node[ $last_index ];
  58. $parent_node[ $node_name ] = $node_array ;
  59. }
  60. else
  61. {
  62. $parent_node[ $node_name ] = $ node_array ;
  63. }
  64. }
  65. else
  66. {
  67. $append = &$parent_node[ $node_name ] ;
  68. if( isset( $append[ $this->attributesAsName ] ) )
  69. {
  70. $parent_node[ $node_name ] = array( $append );
  71. $append = &$parent_node[ $node_name ] ;
  72. }
  73. if( isset( $ 추가[ $node_index ] ) )
  74. {
  75. $append = &$append[ $node_index ] ;
  76. }
  77. // 追加
  78. array_push( $append , $node_array ) ;
  79. }
  80. $index = 0 ;
  81. // 递归操작
  82. foreach( $children as $childnode )
  83. {
  84. $parent = &$parent_node[ $node_name ] ;
  85. $this->createXMLArray( $childnode ,$parent,$index );
  86. }
  87. return $parent_node ;
  88. }
  89. 공용 함수 parseXml( $isjson=false)
  90. {
  91. $root = simplexml_load_string ( $this->xml ) ;
  92. $parent_node = array();
  93. $array = $this->createXMLArray( $root ,$parent_node ) ;
  94. $isjson을 반환하나요? json_encode( $array ) : $array ;
  95. }
  96. }
复代码


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿