문제

내가 찾으려고 노력하고 병합하는 방법은 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 );
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top