2010-04-25 2 views
2

SAX를 사용하여 자체 닫기 XML 태그를 구문 분석하는 데 문제가 있습니다. Google Base API에서 링크 태그를 추출하려고합니다. 정규 태그를 파싱하는 데 상당한 성공을 거두고 있습니다. 여기 SAX 파서를 사용하여 자체 닫기 XML 태그를 구문 분석하는 데 문제가 발생했습니다.

은은 XML의 조각

<entry> 
    <id>http://www.google.com/base/feeds/snippets/15802191394735287303</id> 
    <published>2010-04-05T11:00:00.000Z</published> 
    <updated>2010-04-24T19:00:07.000Z</updated> 
    <category scheme='http://base.google.com/categories/itemtypes' term='Products'/> 
    <title type='text'>En-el1 Li-ion Battery+charger For Nikon Digital Camera</title> 
    <link rel='alternate' type='text/html' href='http://rover.ebay.com/rover/1/711-67261-24966-0/2?ipn=psmain&amp;icep_vectorid=263602&amp;kwid=1&amp;mtid=691&amp;crlp=1_263602&amp;icep_item_id=170468125748&amp;itemid=170468125748'/> 
. 
. 

그래서 나는 업데이트 및 게시 된 태그가 아니라 링크 및 카테고리 태그를 구문 분석 할 수

에 있습니다. ..

private Stack<String> xmlTags = new Stack<String>(); 

어떤 도움들 여기

내의 startElement하고하는 endElement는 xmltags에 대한

public void startElement(String uri, String localName, String qName, 
    Attributes attributes) throws SAXException { 
    if (qName.equals("title") && xmlTags.peek().equals("entry")) { 

    insideEntryTitle = true; 

    } 
    xmlTags.push(qName); 

} 

public void endElement(String uri, String localName, String qName) 
    throws SAXException { 
    // If a "title" element is closed, we start a new line, to prepare 
    // printing the new title. 

    xmlTags.pop(); 
    if (insideEntryTitle) { 
    insideEntryTitle = false; 
    System.out.println(); 
    } 
} 

선언을 무시?

여기 내 첫 번째 게시물입니다. 나는 게시 규칙을 따라 왔으면 좋겠다. 고마워요 톤 남자들 ..

수정 : endElement가 호출됩니다. characters 않습니다. characters이 무엇

public void characters(char[] ch, int start, int length) throws SAXException 
{ 
    if (insideEntryTitle) 
    { 
     String url= new String(ch, start, length); 
     System.out.println("url="+title); 
     i++; 
    } 
} 
+0

모든 블록 코드는 4 개의 공백으로 들여 쓰기해야합니다 (이번에는 내가 편집했습니다). 이것은 xml 샘플에도 적용됩니다. –

+0

증상은 무엇입니까? 메서드 중 어느 것도 호출되지 않습니까, 아니면 하나만 호출합니까? –

+0

명심하십시오! 시작 요소 만 호출됩니다. – sandesh

답변

1

는 XML 요소 태그 사이의 콘텐츠를 제공하는 것입니다 (청크, 메서드 호출 당 하나의 덩어리). 그래서 당신이에 대해 말할 수있는 파서 거기에 어떤 내용이 없기 때문에 다음

<Foo someattrib=“” /> 

characters 같은 XML 요소라고되지 않는 경우.

당신이 당신의 문자 방법을 사용 잘못을하고있는 , 태그가 비어있는 경우에도 여기에 전화를받을 필요에 의존하는 경우.

characters 메서드는 요소 텍스트를 버퍼에 추가하지만 endElement는 모든 요소 텍스트를 받았음을 알고있는 위치이기 때문에 startElement 및 endElement는 버퍼를 지우고 읽는 작업을 담당해야합니다. 읽을 것이 없으면 문자를 호출하지 않아도됩니다.

아직 모든 문자가 포함되어 있지 않으므로 으로 전화를 걸면 해당 방법에 비즈니스 논리가 없어야합니다. 그러면 코드가 작동하지 않습니다.

문자 구현 방법은 this example을 참조하십시오. 원하는 속성 값을 읽으려면 this example을 참조하십시오.

+0

이것을 파싱하는 방법을 파악할 수 있었습니까? 나는 같은 종류의 XML 문서를 파싱하는 것과 같은 어려움을 겪고있다. – Rudy

+0

@Rudy : 더 많은 설명을 추가하고 내가 쓴 다른 답변의 예제와 연결되었습니다. –

관련 문제