저는 simplexml을 kml 문서를 통해 사용하고 있으며 특정 순서로 속성을 검색해야하는 프로젝트에서 작업하고 있습니다. 내가 그렇게 할 수있는 방법이 - 나는 이름 = "우편 번호가"어디 SimpleData 값에 액세스하기를 원한다면in simplexml 직접 속성을 기반으로 필드에 액세스 할 수 있습니까?
나는 이런 식으로 뭔가가 있다면 .... 그래서
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#mizipirs">
<SimpleData name="ZCTA5CE10">55555</SimpleData>
<SimpleData name="GEOID10">55555</SimpleData>
<SimpleData name="CLASSFP10">XX</SimpleData>
<SimpleData name="MTFCC10">XXXXX</SimpleData>
<SimpleData name="FUNCSTAT10">X</SimpleData>
<SimpleData name="ZIPNUMERIC">XXXXX</SimpleData>
<SimpleData name="ALAND10">XXXX</SimpleData>
<SimpleData name="AWATER10">XXXX</SimpleData>
<SimpleData name="INTPTLAT10">XX.XXXX</SimpleData>
<SimpleData name="INTPTLON10">XX.XXXX</SimpleData>
<SimpleData name="ZIPcode">XXXXX</SimpleData>
<SimpleData name="AreaName">XXXXX</SimpleData>
<SimpleData name="TaxYear">XXXXX</SimpleData>
<SimpleData name="numreturns">XXX</SimpleData>
<SimpleData name="numjointre">XXX</SimpleData>
<SimpleData name="avg_agi">XXX</SimpleData>
</SchemaData></ExtendedData>
<Polygon><outerBoundaryIs><LinearRing><coordinates>[lots of lat/lng data here removed for everyone's own convenience]</coordinates></LinearRing></outerBoundaryIs></Polygon>
? 비록이 속성을 기반으로 xpath를 사용하는 방법을 모르겠지만 xpath를 사용할 수는 없기 때문에이 문서에는 MANY가 있습니다.
편집 :
나는 ... 뭔가를 싶어요
if(isset($xml->Document->Folder->Placemark)){
foreach($xml->Document->Folder->Placemark as $place) {
$zip = $place->xpath('//SchemaData/SimpleData[@name="ZIPcode"]/text()');
}
}
원하는 효과는 그것이 "우편 번호"의 속성으로 SimpleData 요소의 값을 끌어 것이되고, 그것은 것 각 위치 표시 요소에 대해이 작업을 수행하십시오. 하지만이 코드를 반환 할 수는 없습니다.
XML에서 제외 된 구조가 약간 있지만 필요한 부분을 남겼습니다. 내가 모든 것을 빠뜨리면, 이것은 훨씬 더 큰 문서가 될 것입니다.
편집 편집 : 나는 진정한 문제를 발견했으며, 미래에는 누구에게나 도움이 될 것입니다. KML 또는 XML에 기본 네임 스페이스가있는 경우 "registerXPathNamespace ("c ","namespace here ")"로 네임 스페이스를 정의하고 $ xml-> xpath ('// c : element '); 오류 메시지가 표시되지 않고 그냥 매번 빈 배열을 검색했습니다.
나는 속성에 의해 뭔가를 얻는 정확한 구문을 몰랐다. 나는 또한 text()가 값을 얻기 위해 내장 된 함수라고 가정한다. 직접 액세스 할 수있는 방법이 있습니까? "$ place-> ExtendedData-> SchemaData-> SimpleData [@ name ="ZIPcode "] -> text()"같은 것을 시도하면 "="때문에 오류가 발생합니다. –
@ 존 오클리 오케이, 나는 단지 당신이 이미 당신의 질문에 올바른 @ 문법을 사용했음을 이미 알고 있다고 가정합니다. 또한, XPath를 배우면서 무언가를 Google로 학습하면 가장 먼저 배울 점 중 하나입니다. 그리고 네,'text()'는 요소의 텍스트 값을 추출합니다. 'string()'을 사용하면 프로세서가 주석을 무시할 때 그것을 지원한다면 실제로 더 좋습니다. – dirkk
도움을 주셔서 감사합니다. xpath를 사용한 이후 오랜 시간이 걸렸으므로 메모리에서이 작업을 수행하려고했습니다. 기본 사용법을 확인하고 속성에 의한 xpath 검색을 사용한 php.net에 대한 예제를 보지 못했습니다 (아니면 완전히 놓친 것입니까?). 그 이후로 가능하다고 생각했는데, 데이터에 액세스하는 간단한 방법처럼 보였습니다. –