2012-07-04 11 views
0

저는 cakephp.what의 미리 정의 된 함수 XML 구성 요소를 사용하여 xml 파일 데이터를 처리 목적의 배열로 변환합니다. 내 코드처럼이 FOT :xml 데이터를 cakephp의 배열로 변환합니다.

App::import('Helper', 'Xml'); 
$xml = new XmlHelper(); 
$xml_data = & new XML($filePath); 
$array = Set::reverse($xml_data); 

를이 코드는 완벽하게 작동하고 내 XML 파일 형식의 데이터가 포함되어있는 경우 : 어디 루트 노드

<parent> 
    <tag ...../> 
    <tag ...../> 
</parent> 

입니다.

즉 모든 태그가 단일 상위 태그 내에 있습니다.

<parent> 
    <tag ...../> 
</parent> 
<parent> 
    <tag ...../> 
</parent> 

제 상위 태그 데이터 만이 출력 배열 주어진다 이때 : 데이터가 여러 상위 태그 즉 분포 때

그러나 문제가 발생한다. XML 파일에는 루트 노드가 1 개만 있어야하지만 문제는 XML 파일을 읽는 동안 때때로 여러 개의 루트 노드가있는 파일을 얻는 것입니다. 내가 알고 싶은 것은 여러 루트 노드가있는 XML 파일을 읽을 수있는 방법이 있다는 것입니다.

이 내가 XML 파일

+1

왜 투표를 취소 했습니까? 도움이 될만한 정보가 부족하더라도 합법적 인 질문입니다. 유권자들은 최소한 투표를하는 사람이 적어도 이론적으로는 경험에서 뭔가를 배울 수 있도록 투표를 왜하는지 설명하십시오. – Teekin

+0

@HelgiHrafnGunnarsson : 고맙습니다. – Vineet

답변

0

에서 여러 부모 태그를 읽을 수있는 XML 문서의 루트에 그 부모 요소가 사용하는 다른 방법이 있나요? 이는 XML이 하나의 루트 노드 만 허용하기 때문에 중요합니다. 루트 노드 아래에서 원하는만큼 요소를 가질 수 있습니다. 귀하의 질문에 < 부모>가 루트 노드 또는 루트 노드의 하위 노드인지 여부는 명확하지 않습니다.

그러나 XML 파일이 아주 작게 유지된다는 것을 확신 할 수 없다면 여러분이하려는 것은 나쁜 생각 일 수 있습니다. PHP의 크고 깊은 배열은 빠르게 느려질 수 있습니다. XML 문서에서 물건을 검색하는 일종의 "하위 언어"인 XPath를 배우는 것이 좋습니다. XML 처리는 일반적으로 다소 느리고 덩치가 크지 만 크기가 크고 깊은 PHP 배열은 처리 방법에 관계없이 매우 느려질 수 있습니다.

희망이 있습니다.

+0

고맙습니다. 여기 내 실수가 있어요 .. – Vineet

+0

내 질문을 편집했습니다. 다시 읽어주십시오 .. – Vineet

+0

여러 루트 노드를 읽을 수있는 도구가 없습니다. - 여러 루트 노드가있는 XML 파일을 가져 오는 경우 본질적으로 결함이 있습니다. 이를 처리하는 올바른 방법은 XML 파일을 제공 한 사람들에게 유효한 XML이 필요하다는 것을 알리는 것입니다. 내가 생각할 수있는 유일한 대안 솔루션은 수작업으로 만든 유틸리티로 수동으로 분할 한 다음 여러 파일을 읽는 것입니다. 그러나 그들은 실제로 유효한 XML이어야합니다. – Teekin

관련 문제