2017-10-11 8 views
0

PHP에서 다음 XML 문자열로 작업 중이므로 특정 값에 액세스하려고합니다.PHP에서 중첩 된 XML 값에 액세스하는 방법

예 : 제목의 값을 어떻게 추출 할 수 있습니까? 다음은

내 XML 내용이다 : 나는 값 "반 여자 친구"또는 "뉴 델리"을 얻을 수 있다고 생각 할수 있습니까

<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim"> 
 
    <leader>01118cam a22003497i 4500</leader> 
 
    <controlfield tag="001">18475363</controlfield> 
 
    <controlfield tag="005">20151007123810.0</controlfield> 
 
    <controlfield tag="008">141017s2014 ii   000 f eng d</controlfield> 
 
    
 
    <datafield tag="245" ind1="1" ind2="0"> 
 
    <subfield code="a">Half girlfriend /</subfield> 
 
    <subfield code="c">Chetan Bhagat.</subfield> 
 
    </datafield> 
 
    <datafield tag="264" ind1=" " ind2="1"> 
 
    <subfield code="a">New Delhi :</subfield> 
 
    <subfield code="b">Rupa,</subfield> 
 
    <subfield code="c">2014.</subfield> 
 
    </datafield> 
 
    </record>

?

도움을 주시면 감사하겠습니다.

+0

지금까지 시도한 일부 코드를 표시 할 수 있습니까? –

+0

지금까지. XML을 PHP 배열로 먼저 변환 한 다음 레코드를 수동으로 액세스하려고 시도했습니다 ..'$ value = simplexml_load_string ($ final_marc); $ json = json_encode ($ value); $ configData = json_decode ($ json, true); print_r ($ configData);'그러나 지금까지 행운이 없었고 잘못된 접근이라고 생각합니다. –

+0

'final_marc'는 my xml 문자열을 포함하는 변수입니다. –

답변

0

보유한 문서에서 XPath를 사용하면 리미터 조합으로 데이터를 추출 할 수 있습니다. 당신은 당신의 데이터 필드 요소에 데이터 필요할 것 알고 있다면 - 태그 값은 245입니다, 당신은 기본을 가지고 서브 필드 코드 "는"당신이 할 수있는 일이 같은 ...

<?php 
error_reporting (E_ALL); 
ini_set ('display_errors', 1); 

$final_marc = <<< XML 
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim"> 
    <leader>01118cam a22003497i 4500</leader> 
    <controlfield tag="001">18475363</controlfield> 
    <controlfield tag="005">20151007123810.0</controlfield> 
    <controlfield tag="008">141017s2014 ii   000 f eng d</controlfield> 

    <datafield tag="245" ind1="1" ind2="0"> 
    <subfield code="a">Half girlfriend /</subfield> 
    <subfield code="c">Chetan Bhagat.</subfield> 
    </datafield> 
    <datafield tag="264" ind1=" " ind2="1"> 
    <subfield code="a">New Delhi :</subfield> 
    <subfield code="b">Rupa,</subfield> 
    <subfield code="c">2014.</subfield> 
    </datafield> 
    </record> 
XML; 
$value=simplexml_load_string($final_marc); 
$value->registerXPathNamespace("d","http://www.loc.gov/MARC21/slim"); 
echo "245-a".$value->xpath("//d:datafield[@tag='245']/d:subfield[@code='a']/text()")[0].PHP_EOL; 
echo "264-a".$value->xpath("//d:datafield[@tag='264']/d:subfield[@code='a']/text()")[0].PHP_EOL; 

입니다 이것은 네임 스페이스로 문서에 등록되어 있으며이 경우 편의상 접두어로 'd'를 정의했습니다. 그런 다음 XPath에서 요소 이름 앞에 d를 넣습니다. @ 태그 비트는 속성 값 = 264 (예 :) 또는 코드 속성이 'a'라고 말합니다.

+0

이 줄을 설명해 주시겠습니까? $ value-> registerXPathNamespace ("d", "http://www.loc.gov/MARC21/slim"); ' –

+0

XPath를 사용할 때, 검색어에서 사용하고 있습니다. 이 문서는 기본 네임 스페이스 (기본 요소에 접두사가 없음)가 있으므로 편리한 값으로 'd'를 사용했습니다. 후속 XPath 식에서 요소 이름 앞에 'd :'를 넣어 특정 네임 스페이스에 요소가 있음을 나타냅니다. –

+0

설명에 감사드립니다. –