>  기사  >  백엔드 개발  >  SimpleXML을 사용하여 PHP_php에서 XML 파일 구조를 확인하는 예 팁

SimpleXML을 사용하여 PHP_php에서 XML 파일 구조를 확인하는 예 팁

WBOY
WBOY원래의
2016-05-16 20:26:211048검색

SimpleXML을 사용하여 XML 구조가 사양을 충족하는지 확인합니다. 이 프로그램을 다목적으로 만들기 위해 벤치마크 파일을 구조적 기준으로 사용하고 여기에 정의된 노드와 속성을 기반으로 파일이 있는지 확인합니다. 기본 필수 형식을 충족합니다.

코드 복사 코드는 다음과 같습니다.

 
/**XML 파일 구조 확인
* @param string $baseFilePath 기본 구조 파일
* @param string $checkFilePath 확인할 파일
* @return bool 구조가 벤치마크 파일과 일치하면 true를 전달하고, 그렇지 않으면 false를 전달합니다.
**/ 
함수 checkXmlFileStructure($baseFilePath,$checkFilePath){
/*기본 파일 열기*/ 
If(!file_exists($baseFilePath)){ return false }
$base = simplexml_load_file($baseFilePath)
If($base===false){ false를 반환 }
 
/*확인 파일 열기*/ 
If(!file_exists($checkFilePath)){ return false }
$check = simplexml_load_file($checkFilePath)
If($check===false){ false 반환 }
 
/*비교 시작점 이름*/ 
If($base->getName() != $check->getName()){ return false }
 
/*비교 구조*/ 
return checkXmlStructure($base,$check)

 
/**XML 구조 확인
* @param SimpleXMLElement $base 기본 구조 객체
* @param SimpleXMLElement $check 확인할 XML 객체
* @return bool 구조가 기본 객체와 일치하면 true를 전달하고, 그렇지 않으면 false
**/ 
함수 checkXmlStructure($base,$check){
/*속성 확인*/
foreach ($base->attributes() as $name => $baseAttr){
                     /*필요한 속성이 존재하지 않습니다*/                                      If(!isset($check->attributes()->$name)){ return false }
}  
 
/*하위 노드가 없으면 검사 개체도 하위 노드를 가질 수 없습니다*/ 
If(count($base->children())==0){
         반환 (count($check->children())==0);                             }  
 
/*검사 대상의 하위 노드를 그룹화합니다*/
$checkChilds = 배열()
foreach($check->children() as $name => $child){
                  $checkChilds[$name][] =                                               }  
 
/*하위 노드 확인*/
$checked = 배열()
foreach($base->children() as $name => $baseChild){
            /*이미 확인된 하위 노드 건너뛰기*/                                                             If(in_array($name, $checked)){ 계속 }
            $checked[] = $name;                                                    
                  /*필요한 하위 노드가 있는지 확인*/                                        If(emptyempty($checkChilds[$name])){ return false }
 
foreach($checkChilds[$name]($child)){
| If( !checkXmlStructure($baseChild, $child) ){ return false }
~ }  
 
true를 반환합니다.

 
 
/*=============================================== ==============================*/
 
if(isset($_SERVER['argv'])){
Parse_str(preg_replace('/&[-] /','&',join('&',$_SERVER['argv'])), $_GET);  
If(emptyempty($_GET['base_file']) ||emptyempty($_GET['check_file'])){
       echo "실행: ".basename(__FILE__)." base_file=base.xml check_file=check.xmln"; 출구(1);   
   }   
   
   종료( checkXmlFileStructure($_GET['base_file'],$_GET['check_file']) ? 0 : 1);   
   
}else{   
   if(emptyempty($_GET['base_file']) ||emptyempty($_GET['check_file'])){   
       echo "실행: ".basename(__FILE__)."?base_file=base.xml&check_file=check.xml
"; 출구;   
   }   
   
   echo( checkXmlFileStructure($_GET['base_file'],$_GET['check_file']) ? '1' : '0');   
}  

使사용 방법(쉘)

复主代码 代码如下:

php check_xml_file_structure.php base_file=base.xml check_file=check.xml   
   
만약 [ "j$?" != "j0" ]; 그럼   
   echo "실행 오류"   
그렇군요

测试范例 1
base_1.xml
复代码 代码如下:

   
<항목>   
   <아이템>   
       <카테고리>카테고리문자   
       <제목>제목문자   
      
 
check_1.xml
 
   
<항목>   
   <아이템>   
       <카테고리>카테고리문자   
       <제목>제목문자   
      
   <아이템>   
       <카테고리>카테고리문자   
       <제목>제목문자   
       <설명>설명문자   
      
  

测试范例 2
base_2.xml
复代码 代码如下:

   
<항목>   
      
  
check_2.xml
   
<항목>   
      
      
      

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.