Xml을 XmlPullParser로 구문 분석하고 있습니다. Xml 태그와 그 안에 포함 된 텍스트를 다루기를 원하지만 XmlPullParser는 태그 사이의 공백 텍스트 (공백과 캐리지 리턴)를 읽습니다. 이 공백을 무시하도록 설정할 수 있습니까?XmlPullParser가 공백을 무시하도록 하시겠습니까?
답변
(이 완전히 잘못되면 이렇게 사과) 내가 전에 XmlPullParser를 사용하지 않는했지만 전화 할 때 nextToken() 당신이 반환 값을보고 IGNORABLE_WHITESPACE 건너 뛸 할 것 같은 JavaDoc을 한 눈을 가진, 그것은 보인다.
다음은 부적절했습니다 (감사합니다 Jeff) :
현재 XmlPullParser를 사용해야합니까? 당신이 달성하려고하는 것처럼 그것
소리를 기반으로, 나는 더 높은 수준의 API를
Simple 같은 고려할 것. 나는 일반적으로
JAXB을 사용한다. 그러나 그것은 선택의 여지가 없다.
공백을 무시하는 설정이있는 경우 IDK. 현재 노드를 문자열로 추적하면 공백을 무시하도록 코딩 할 수 있습니다. 현재 노드가 비어 있으면 텍스트를 무시하십시오. 내 테스트 결과, 그냥 줄 바꿈 등을 피할 수있는 것으로 나타났습니다. 나는 다음과 같이 그것을 최적화했다. 위험이 내가 당신
String N=""; // Yes I know its Capitalized but its the Current Node and very important to keep track of.
if (eventType == XmlPullParser.START_TAG) {
N = xpp.getName();//save the name of the node.
...
} else if (eventType == XmlPullParser.END_TAG) {
N = "";//clear the name of the node.
} else if (eventType == XmlPullParser.TEXT) {
//if the name of the node is not blank then process it
if (!N.equals("")) {
//I have a node so process it
}
행운
해결책 자신을 찾고 후 늦은 대답을 추가하기에이 작동하지 않을 수 있습니다 사용하고있어 XML에서 작동합니다.
구문 분석기에는 isWhiteSpace()
메서드가 있습니다. 텍스트 관련 이벤트 유형 (예 : TEXT
, CDSECT
, IGNORABLE_WHITESPACE
)에서만 호출 할 수 있습니다. 그렇지 않으면 예외가 발생합니다.
next
또는 getEventType
을 호출하여 이벤트 유형을 가져올 수 있습니다.
next
을 호출하면 IGNORABLE_WHITESPACE
이벤트가 자동으로 건너 뜁니다. 이 이벤트 유형은 nextToken
을 호출 할 때만 유효하며 모든 세분화 된 이벤트 유형에 적용됩니다. next를 호출하여 "무시할 수있는"공백을 건너 뛰더라도 파서는 거의 모든 공백을 무시할 수없는 것으로 판단하므로 건너 뛸 수있는 권한이 필요합니다.
boolean isEoD = false;
do{
switch (parser.next()){
default:
break;
case XmlPullParser.TEXT:
if(!parser.isWhitespace()) //Throws if called on wrong eventType
System.out.println("Text: " + parser.getText());
break;
case XmlPullParser.START_TAG:
case XmlPullParser.END_TAG:
System.out.println("TAG: " + parser.getName()+ "\n");
break;
case XmlPullParser.END_DOCUMENT:
isEoD = true;
}
}while(!isEoD);
그는 아마도 메모리 제약으로 인해 끌어 오기 구문 분석기를 사용하고 있습니다. Android에 익숙한 지 잘 모르겠지만 대규모 XML 문서를 구문 분석하는 것은 전체 메모리 내 AST에서 가능하지 않습니다. 특정 크기 이상을 처리하려면 풀 해석을 사용해야합니다. –
아, 알았어. +1 고마워 :) – phippsnatch
그가 XmlPullParser로 할 수있는 일에 대한 실제 제안이 맞습니까? 아니면 더 좋은 방법이 있습니까? 분명히 나는 핸드셋이 아닌 서버를 다루는 데 익숙하다. :) 재미 있습니다! – phippsnatch