>  기사  >  백엔드 개발  >  PHP가 xmllint 명령을 사용하여 xml 및 html_php 팁을 처리하는 방법

PHP가 xmllint 명령을 사용하여 xml 및 html_php 팁을 처리하는 방법

WBOY
WBOY원래의
2016-05-16 20:28:13976검색

이 기사의 예에서는 PHP가 xmllint 명령을 사용하여 xml 및 html을 처리하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

xmllint는 xml 처리 및 확인, html 처리에 매우 편리한 도구입니다. Linux에서는 libxml2가 설치되어 있으면 이 명령을 사용할 수 있습니다. 먼저 --html 및 --xpath 매개변수를 사용하여 HTML을 처리하는 예를 살펴보겠습니다.

예는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
curl http://www.jb51.net /ip/?q =8.8.8.8 2>/dev/null | xmllint --xpath "//ul[@id='csstb']" - 2>/dev/null 's/<[^> ;]* >//g'

위의 예에서는 123cha에 대한 IP 주소의 소유권을 질의한 후 결과(ul#csstb)를 추출하여 텍스트 부분의 내용만을 구하고 있습니다. 위 스크립트 문장을 실행한 결과는 다음과 같습니다.

[문의]:8.8.8.8
이 사이트의 주요 데이터:
미국> 이 사이트의 보조 데이터: Google Public DNS 제공:hypo
미국 Google의 무료 Google Public DNS는 다음을 제공합니다. zwstar 참조 데이터 1: 미국
참고자료 2: 미국

다른 주요 매개변수의 사용법을 예시와 함께 살펴보겠습니다.


1. --형식
이 매개변수는 가독성이 좋도록 xml 형식을 지정하는 데 사용됩니다.
다음 내용을 포함하는 xml(person.xml)이 있다고 가정합니다.

코드 복사 코드는 다음과 같습니다.
ball< 나이>30남성
다음 작업을 수행하면 더 읽기 쉬운 xml 형식으로 출력됩니다.

코드 복사 코드는 다음과 같습니다.
#xmllint --format person.xml



30
<성별>남성


2. --노블랭크
--format과 반대로 전송량을 절약하기 위해 xml에서 공백을 제거하려는 경우가 있습니다. 이 경우 --noblanks 명령을 사용할 수 있습니다.
xml(person.xml)의 내용은 다음과 같다고 가정합니다

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


30
<성별>남성

이 매개변수 작업을 실행한 후의 출력 결과는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
#xmllint --noblanks person.xml


3. --스키마

스킴을 사용하여 xml 파일의 정확성을 확인하세요(XML 스키마는 XML 기반 DTD 대체품입니다) xml 파일(person.xml)과 schem 파일(person.xsd)이 있다고 가정하면 내용은 다음과 같습니다
person.xml



30
<성별>남성


사람.xsd


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

   
     
     
     
       
         
           
           
         
       

     

     
       
         
           
           
           
         

       

     

   

按如下命令执行后的结果是:

复主代码 代码如下:
#xmllint --schema person.xsd person.xml

   
      공
      30
      <성별>남성
   

person.xml의 유효성을 검사합니다.
참고: 默认情况下,验证后会输ude验证的文件内容,可以使用 --noout选项去掉此输流,这样我们可以只得到最厎的验证结果。

复제대码 代码如下:
#xmllint --noout --schema person.xsd person.xml

person.xml이 유효성을 검사합니다.
하단에는 我们改动person.xml,使这份文件age字段和sextour是不符份动义的。
复代码 代码如下:
#xmllint --noout --schema person.xsd person.xml
person.xml:4: 요소 연령: 스키마 유효성 오류: 'age' 요소: 'not age'는 원자 유형 'xs:integer'의 유효한 값이 아닙니다.
person.xml:5: 요소 섹스: 스키마 유효성 오류: 'sex' 요소: ['enumeration' 패싯] 'test' 값은 {'male', 'female'} 집합의 요소가 아닙니다.
person.xml:5: 요소 섹스: 스키마 유효성 오류: 'sex' 요소: 'test'는 로컬 원자 유형의 유효한 값이 아닙니다.
person.xml 유효성 검사 실패

可以看到xmllint成功的报出了错误!

4、 关于--스키마적 표현

이전에 先看下side에서는 php执行xmllint然后拿到返回结果,你代码通常应该是这个样子valid.php를 사용하여

复제대码 代码如下:
$command = "xmllint --noout --schema person.xsd person.xml";
exec($command, $output, $retval);
//출출错时返回值不为0
if ($retval != 0){
    var_dump($output);
}
그렇지 않으면{
    echo "그렇습니다!";
}

위의 person.xml에 오류를 유지합니다.

이 코드를 실행하면 결과가 오류가 아니라 array(0) {}라는 것을 알 수 있습니다. 놀랍습니다!
왜 이런 일이 발생합니까?

xmllint --schema 때문에 검증 중 오류가 발생하면 오류 메시지가 표준 출력(stdout)이 아닌 표준 오류(stderr)를 통해 표시됩니다.

exec의 출력 매개변수는 표준 출력(stdout)에 표시된 내용만 가져올 수 있습니다.
따라서 오류 메시지를 얻으려면 표준 오류를 표준 출력으로 리디렉션하고 이에 따라 코드를 수정해야 합니다.

코드 복사 코드는 다음과 같습니다.
$command = "xmllint --noout --schema person.xsd person .xml 2> ;$1";

valid.php를 다시 실행하면 오류 메시지가 성공적으로 나타납니다!

예는 다음과 같습니다.
먼저 다음 내용을 포함하는 po.xml이라는 xml 문서를 만듭니다.

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



> & Lt; 123 메이플 스트리트 & LT;/스트리트 & GT; > > >

                                                                                  > > > > >

서둘러요, 잔디밭이 거칠어지고 있어요!
<아이템>
         
~ >                                         <수량>1
~ > >         
         
                                       베이비 모니터
                                        <수량>1
                                             39.98
                 1999-05-21
        



그러면 po.xml용으로 작성된 스키마 파일의 이름은 po.xsd이고 내용은 다음과 같습니다.




코드 복사


코드는 다음과 같습니다.

 
 
   example.com의 구매 주문 스키마.
   저작권 2000Example.com. 모든 권리 보유.
 
 

 
 
 
 
  
  
  
  
 

 
 
 
 
  
  
  
  
  
 

  www.jb51.net
 
 
 
  
   
    
     
     
      
       
        
       
      
     

     
     
     
    

    
   

  
 

 
 
 
 
  
 
 

使用 xmllint 对 po.xml 文件进行校验:
复代码 代码如下:
$ xmllint   -schema po.xsd po.xml
如果无出错信息,就说明校验通过了。

希望本文所述对大家的PHP程序设计有所帮助。

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