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
<항목>
항목>