나는 SimpleXML를 사용하려고 노력했지만, 다음과 같습니다 XML 좋아하는 것 같지 않습니다태그 이름에 콜론이있는 XML을 구문 분석하기위한 PHP 라이브러리?
<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>
그래서 라이브러리가 같이 태그를 처리하는이 (그들에 콜론을)를?
나는 SimpleXML를 사용하려고 노력했지만, 다음과 같습니다 XML 좋아하는 것 같지 않습니다태그 이름에 콜론이있는 XML을 구문 분석하기위한 PHP 라이브러리?
<xhtml:div>sample <xhtml:em>italic</xhtml:em> text</xhtml:div>
그래서 라이브러리가 같이 태그를 처리하는이 (그들에 콜론을)를?
이렇게하면 xml을 사용한다고 가정 해보십시오.
<xhtml:div>
<xhtml:em>italic</xhtml:em>
<date>2010-02-01 06:00</date>
</xhtml:div>
당신은 '을 그들'과 같이 액세스 할 수 있습니다 $xml->children('xhtml', true)->div->em;
그러나을, 당신은 날짜 필드를 원하는 경우,이 : $xml->children('xhtml', true)->div->date;
실 거예요 작업을, 당신은 XHTML 네임 스페이스에 붙어 있기 때문이다.
다시 '아이들'이 다시 기본 네임 스페이스 얻기 위해 실행해야합니다 : 당신이 빨리 문제를 해결하려면
$xml->children('xhtml', true)->div->children()->date;
이것이 왜 선택한 대답이 아닌지 확실하지 않습니다. 하지만 미래의 누군가에게 이것은 내 질문/문제를 해결 한 것입니다! :) – daveomcd
이 (내가 게으른 느낄 때 내가 할) :
// Will replace : in tags and attributes names with _ allowing easy access
$xml = preg_replace('~(</?|\s)([a-z0-9_]+):~is', '$1$2_', $xml);
이것은 <xhtml:
을 <xhtml_
으로, </xhtml:
을 </xhtml_
으로 변환합니다. CDATA NameSpaced XML 컨테이너 블록이 포함되어 있거나 UNICODE 태그 이름이 있지만 일반적으로 안전하게 사용한다고 가정하면 해키의 종류가 실패 할 수 있습니다. (아직 실패하지 않았습니다).
나는 콜론을 제거하거나 다른 사람들이 제안한 것처럼 다른 것으로 대체하는 것이 좋지 않다고 생각합니다. 네임 스페이스 접두어가있는 요소에 쉽게 액세스 할 수 있습니다. 네임 스페이스를 식별하는 URL을 인수로 사용하여 children() 메서드에 전달하거나 네임 스페이스 접두사와 "true"를 children() 메서드에 전달할 수 있습니다. 두 번째 접근법은 PHP 5.2 이상이 필요합니다.
정확히 받아 들인 대답에서 네이선 리드가 제안한 바가 아닙니까? 나는 regex-fu가 더러운 해킹이지만,'children()'선택자를 거치지 않아도된다는 것에 동의하지 않는다. – mpen
네, 동일합니다. 방금 네임 스페이스를 식별하는 URL을 PHP 5 이상에서 작동하는 children() 메서드에 전달할 수도 있음을 나타냅니다. IMHO, 사용할 수있는 핵심 방법이있을 때, 더러운 해킹을 할 필요가 없습니다. –
관련 코드 스 니펫을 게시하십시오. SimpleXML은 네임 스페이스에 문제가 없어야합니다. –
또한 XML 데이터에 태그에 콜론이 있으면'SimpleXMLElement ($ data) '와 동일한 문제가 발생했습니다. –