2011-12-05 2 views
2

XML 파일에 '생산자'가 있습니다.PHP로 XML 컨텐츠 검색 및 표시

<producer> 
    <name>John Doe's Fish Emporium!</name> 
    <owner>John Doe</owner> 
    <address> 
     <civic>123</civic> 
     <mailing>Example Drive</mailing> 
     <town>Halifax</town> 
     <province>Nova Scotia</province> 
     <postal>A1B 2C3</postal> 
     <phone>902-123-4567</phone> 
     <fax>902-098-7654</fax> 
     <email>[email protected]</email> 
     <website>www.example.com</website> 
    </address> 
    <products> 
     <product>Pollock (Saithe)</product> 
     <product>Flounder/Sole</product> 
     <product>Salmon, Farm Raised</product> 
     <product>Mussels, Blue</product> 
    </products> 
    <exports> 
     <region>Europe</region> 
     <region>North America</region> 
     <region>Pacific Rim</region> 
     <region>United States</region> 
    </exports> 
</producer> 

이 사용자는 다음, 해당 키워드에 대한 XML 문서를 검색합니다 HTML 형식으로 값을 입력 전체 프로듀서를 출력 할 것이다 : 여기

은 파일의 샘플입니다. 예를 들어, 사용자가 Salmon 제품을 검색하면, 검색은 위의 전체 제작자를 뱉어 낼 것입니다. XML 문서에서 내가 어디에 있는지 감지하고 전체 제작자를 에코하려면 어떻게해야합니까?

감사합니다.

답변

2

생산자 요소가 생산자 루트 노드의 직접 하위라고 가정합니다. 그렇지 않을 경우, 그에 따라 조정 :

/producers/producer[descendant::*[contains(text(), "Salmon")]] 

이 자식 텍스트 노드의 IT의에서 텍스트 연어가있는 모든 생산 요소를 찾을 수 있습니다. 이 XPath를 사용하면 모든 하위 노드를 검색 할 수 있습니다. 지역, 마을, 제품 등 - 수준에 관계없이.

상용구 코드는 Implementing condition in XPath을 참조하십시오.

+0

고마워요! 나는 이것을 사용할 것이다. – jasonaburton

0

이것은 이미 여러 번 답변되었으며, 오른쪽의 관련 링크를 확인하십시오. 여기에 당신이 필요 해요 무슨 :

simplexml

DOM

XPath

+0

현재 SimpleXML을 사용하고 있지만 요소의 상위 태그에 액세스 할 수있는 방법이 없습니다. – jasonaburton

+1

이것은 아마도 코멘트 일 것임에 틀림 없다. 원래의 질문 –

+0

가 xpath를 시도 했어야했다. 편집에서 말했듯이, 여러 번 대답 해 주었고, 대신에 참조로 질문에 대답했기 때문에 downvote하지 않았다면 고맙겠습니다. 쉽게 찾을 수있는 답변을 제공합니다. – mseancole

0

이 힘을 도움이 : -

$obj = simplexml_load_string(...); 
$expr = "/producer/products/product[contains(text(),'salmon')]/../.."; 
$found = $obj->xpath($expr); 

이 즐길 재미를!

+0

니스, 고마워! :) – jasonaburton