사

xml 파싱 도움좀 주세요..

· 2012-04-06 (금) 14:47:29 · 3510 · 1
11번가 파싱을 하고있습니다..

파싱법을 정확하게 모르고 구글링으로 할려고 하니깐 잘 모르겠네요..

xml은 참고소스형식으로 불러 옵니다.


메인 페이지에서
$xmlParser = new XMLParser();
$parser = @xml_parser_create();
if (!is_resource($parser)){
die("PHP XML parser에러");
} else {
xml_set_object($parser, $xmlParser);
xml_set_element_handler($parser, "startHandler", "endHandler");
xml_set_character_data_handler($parser, "cdataHandler");
}

if (!xml_parse($parser, $body, true)) {
printf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser));
}

if (is_resource($parser)) {
xml_parser_free($parser);
unset( $parser );
}


이런식으로 해놓았습니다.

xml_set_element_handler($parser, "startHandler", "endHandler");
xml_set_character_data_handler($parser, "cdataHandler");

이부분이 정확하게 어떻게 처리하는지를 모르겠네요.




class XMLParser {
var $inItem = FALSE;
var $currentElement = FALSE;
var $itemInfo = array();
var $cdata = "";

function startHandler($parser, $element, $attr) {
switch ($element) {
case "ITEM":
$this->inItem = TRUE;
break;

case "TITLE" :
case "AUTHOR" :
case "COVER" :
case "PUBLISHER" :
if ($this->inItem) {
$this->currentElement = $element;
$this->cdata = "";
}
break;

default:
$this->currentElement = FALSE;
break;
}
}

function endHandler($parser, $element) {
if ($element == "ITEM") {
$this->inItem = FALSE;
$this->currentElement = FALSE;
}

if ($this->currentElement) {
$this->itemInfo[$this->currentElement] = $this->cdata;
$this->currentElement = FALSE;
$this->cdata = "";
}
}


function cdataHandler($parser, $cdata){
  if($this->inItems==TRUE){
if($this->currentElement=="PRODUCTNAME"){
$this->itemInfo["PRODUCTNAME"] = $cdata;
} else if($this->currentElement=="PRODUCTIMAGE"){
$this->itemInfo["PRODUCTIMAGE"] = $cdata;
} else if($this->currentElement=="DETAILPAGEURL"){
$this->itemInfo["DETAILPAGEURL"] = $cdata;
}   
  }
}

}

구글링해서 얻은 원본 소스는 이거인데.. 어디를 수정해야 하는지 도움좀 주십시요.
 
 
 
///////////////xml
- <ProductSearchResponse>
02   - <Request>
03     - <Arguments>
04       <Argument name="key" value="234" /> 
05       <Argument name="apiCode" value="ProductSearch" /> 
06       <Argument name="keyword" value="cp671 225/55R17" /> 
07      </Arguments>
08      <ProcessingTime>0.023 sec</ProcessingTime> 
09   </Request>
10   
11 - <Products> 
12     <TotalCount>8</TotalCount> 
13   
14 - <Product>  <==이부분 부터 물품 반복
15   <ProductCode>168246154</ProductCode> 
16 - <ProductName>
17 - <![CDATA[ 넥센타이어 NEXEN CP671 [225/55R17] 중대형 세단에 적합한 사계절 패턴 디자인, 넥센 고급 타이어, 제조일로 부터 3~4개월 이내 타이어, 왕도매 타이어
18   ]]> 
19   </ProductName>
20   <ProductPrice>90800</ProductPrice> 
21 - <ProductImage>
22 - <![CDATA[ http://i.011st.com/t/080/i/2/4/6/1/5/4/168246154_B_6.jpg
23   ]]> 
24   </ProductImage>
25 - <ProductImage100>
26 - <![CDATA[ http://i.011st.com/t/100/i/2/4/6/1/5/4/168246154_B_6.jpg
27   ]]> 
28   </ProductImage100>
29 - <Text1>
30 - <![CDATA[  
31   ]]> 
32   </Text1>
33 - <Text2>
34 - <![CDATA[  
35   ]]> 
36   </Text2>
37 - <SellerNick>
38 - <![CDATA[ 왕도매타이어
39   ]]> 
40   </SellerNick>
41   <Seller>wholetire</Seller> 
42   <SellerGrd>1</SellerGrd> 
43   <Rating>27</Rating> 
44 - <DetailPageUrl>
45 - <![CDATA[ http://www.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=168246154
46   ]]> 
47   </DetailPageUrl>
48   <SalePrice>71940</SalePrice> 
49 - <Delivery>
50 - <![CDATA[ 무료
51   ]]> 
52   </Delivery>
53   <ReviewCount>9</ReviewCount> 
54   <BuySatisfy>100</BuySatisfy> 
55   <MinorYn>Y</MinorYn> 
56 - <Benefit>
57   <Discount>18860</Discount> 
58   <Mileage>0</Mileage> 
59   </Benefit>
60   </Product>
|

댓글 1개

2012-06-04 (월) 10:16:47
아래소스는 제가 xml처리한 다른 방식입니다.
간추려서 수정을 했습니다.
참고가 되실길 바랍니다.

---------------------------------------------
ini_set('allow_url_fopen','ON') ;

$xml = @simplexml_load_file(주소);
$cnt = count($xml->Product);

for($i=0;$i<$cnt;$i++){
print $xml->Product[$i]->ProductName;
}
---------------------------------------------
http://php.net/manual/en/function.simplexml-load-file.php
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
13-07-14 조회 5,391
13-07-14 조회 5,362
13-07-14 조회 4,641
13-07-14 조회 4,241
13-07-14 조회 4,097
13-07-14 조회 4,165
13-07-14 조회 4,881
13-07-14 조회 4,528
13-07-14 조회 4,313
13-07-14 조회 5,358
13-07-14 조회 5,234
13-07-14 조회 5,031
13-07-14 조회 4,730
13-07-14 조회 5,397
13-07-13 조회 3,569
13-07-01 조회 5,626
13-07-01 조회 5,758
13-07-01 조회 3,846
13-07-01 조회 5,208
13-05-27 조회 3,948
13-05-21 조회 4,863
13-05-02 조회 1만
13-04-29 조회 5,178
13-04-15 조회 5,442
13-04-13 조회 6,338
13-02-27 조회 3,827
13-02-26 조회 6,430
13-02-12 조회 5,022
13-02-01 조회 2.3만
13-01-23 조회 3,403
13-01-09 조회 7,991
13-01-07 조회 4,920
13-01-07 조회 3,646
13-01-04 조회 1.3만
13-01-03 조회 1.2만
12-12-31 조회 6,139
12-12-27 조회 4,424
12-12-27 조회 4,088
12-12-27 조회 8,723
12-12-18 조회 3,608
12-12-12 조회 3,667
12-12-12 조회 6,656
12-12-12 조회 8,123
12-12-05 조회 5,247
12-12-01 조회 6,659
12-11-22 조회 4,590
12-11-09 조회 5,415
12-11-09 조회 7,496
12-10-29 조회 4,751
12-10-16 조회 6,297
12-10-09 조회 5,280
12-09-02 조회 4,447
12-09-01 조회 3,543
12-08-30 조회 4,204
12-08-30 조회 4,195
12-08-28 조회 3,528
12-08-21 조회 7,139
12-08-20 조회 3,663
12-08-18 조회 5,060
12-08-18 조회 3,433
12-08-11 조회 3,596
12-08-09 조회 3,704
12-08-07 조회 3,627
12-08-07 조회 4,211
12-08-01 조회 4,546
12-08-01 조회 4,358
12-07-20 조회 9,820
12-07-17 조회 4,125
12-07-15 조회 3,905
12-07-10 조회 4,203
12-07-09 조회 6,922
12-07-05 조회 3,252
12-07-04 조회 3,417
12-06-30 조회 5,677
12-06-28 조회 3,748
12-06-20 조회 3,884
12-06-16 조회 3,164
12-06-14 조회 3,845
12-06-07 조회 3,873
12-06-06 조회 6,116
12-05-27 조회 4,417
12-05-25 조회 3,181
12-05-25 조회 3,012
12-05-24 조회 3,070
12-05-24 조회 4,512
12-05-23 조회 3,872
12-05-22 조회 6,486
12-05-15 조회 3,830
12-05-15 조회 3,615
12-05-14 조회 3,041
12-05-12 조회 3,510
12-05-11 조회 6,970
12-05-07 조회 4,412
12-04-28 조회 3,616
12-04-25 조회 5,242
12-04-15 조회 3,838
12-04-12 조회 4,674
12-04-11 조회 3,419
12-04-08 조회 3,242
12-03-21 조회 6,352