에서 데이터를 혼합하 여러 XML 노드를 하나의 변수 PHP
문제
내가 찾으려고 노력하고 병합하는 방법은 FIPS 의 일부 이 XML 파일 중 하나로 php 변수와 이 라이브러리는 그러한 문제를.
샘플 xml 파일을 사용하려가 http://codepad.org/MQeR2VBZ
기본적으로 나는 원하는 변수는"001033,001077"그것으로(없이 따옴표를"
나는 새로운 PHP 고 이번이 처음 시간을 사용하여 직접 그래서 저를 용서해 주시면 나는 전체의 실패
해결책
이 문제를 해결할 수 있습으로 쉽 XPath.
XPath 를 쿼리할 수 있도록 노드에 있는 문서에서 거의 모든 가능합니다.에 대한 쿼리 의 지오는 값 앞에는 값 이름 요소와 콘텐츠 FIPS6, 할 수 있습 쿼리를 사용:
/alert/info/area/geocode/value[preceding-sibling::valueName = "FIPS6"]
그러나 문서에는 기본 네임스페이스 에 대한 경고 요소(에 의해 표시 xmlns 성).기본적으로,이 라이브러리는 그러한 문제이지에 액세스할 수 있는 모든 노드 네임스페이스에서 문서를 통해 XPath 까지 우리가 그것을 말하는 네임스페이스를 통해 registerXPathNamespace
와 접두사는 어떤 요소에서 쿼리를 임의 접두사입니다.
의 결과 XPath 것이 포함된 배열 SimpleXmlElements.전할 때 SimpleXmlElement 자(또는 그것을 사용하는 문자열의 컨텍스트),가 반환됩니다 그것은 nodeValue 는 값은 실제로 원하는 결합할 수 있도록,단순히 전화 implode
에 결과 배열을 결합으로 값을 문자열입니다.
코드(데모)
$alert = simplexml_load_file('http://…');
$alert->registerXPathNamespace('a', 'urn:oasis:names:tc:emergency:cap:1.1');
$fipsValues = implode(',', $alert->xpath(
'/a:alert/a:info/a:area/a:geocode/a:value[
preceding-sibling::a:valueName = "FIPS6"
]'
));
print_r($fipsValues); // will contain "001033,001077"
다른 팁
오른쪽 경로에서 시작해야합니다.
$string = <<<XML
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<?xml-stylesheet href='http://alerts.weather.gov/cap/capatomproduct.xsl' type='text/xsl'?>
<alert xmlns='urn:oasis:names:tc:emergency:cap:1.1'>
....
[rest of xml here]
....
</alert>
XML;
$xml = simplexml_load_string( $string );
$fips6 = array();
foreach( $xml->info->area->geocode AS $element ) {
if( $element->valueName == 'FIPS6' ) {
$fips6[] = $element->value;
}
}
$value = implode( "," $fips6 );
.