2009-03-05 3 views
2

저는 베타 웹 서비스 API를 사용하는 Air 애플리케이션을 작성했습니다. 때로는이 API가 잘못된 XML 노드를 반환하고 XML 객체를 만들 때 actionscript가 오류를 발생시킵니다.조작 된 XML 부분을 구문 분석/무시하는 방법은 무엇입니까?

필자가 해왔 던 것은 XML이 좋지 않은 경우 결과를 포착하고 전체 응답을 무시하지만 기형의 노드를 무시할 수 있습니다. 예를 들어

:

<result> 
    <Song> 
    <location>http://www.anyurl.com/audio/loftparty092108_pt4.mp3</location> 
    <title>Phonte party @ The Loft, 9/21/08 (pt. 4)</title> 
    <artist>Statik, Jahsonic &amp; Stylus  <artist>Statik, Jahsonic &amp; Stylusre /> 
    </Song> 
</result> 

가 태그를 참조하십시오? 내가 그렇게 할 수 있다면, 전체 노래를 건너 뛰고 다음 곡을 가져 가고 싶습니다.

이것을 수행 할 수있는 방법이 있습니까?

답변

1
  1. 웹 서비스 공급자에게 보내주십시오. 잘못된 XML에 대해 알려주십시오. 그들은 단지 그것을 고칠 수도 있습니다.
  2. 변형 된 XML이 전달되면 Flex의 기본 XML 디코더가 손실되어 throw됩니다.
  3. 처리를 시도하려는 경우 자신의 디코더 롤. HTTPServicexmlDecode 구성원을 참조하십시오.
+0

1. 이미 했어요. 필자는 코드 수정시기를 알지 못하기 때문에 코드에 대한 빠른 수정을 원했습니다. 2. 나는 그것을 알아 챘다. :) 3. 내가 살펴볼 것이지만 HTTPService를 사용하지 않고 URLLoader의 자체 구현을 사용하고 있습니다. – leolobato

+0

그런 경우 전체 이벤트에 대한 사용자 지정 처리기가 필요합니다. – dirkgently

1

Beautiful Soup이 작업을 수행하지만 파이썬으로 작성되었습니다. 물론 소스를 파고 가서 어떻게 구현했는지 확인할 수 있습니다.

1

오류 클래스 수가 적은 경우 오류를 제거하기 위해 XML을 사전 처리 한 다음 파서에 넘깁니다. 이렇게하면 문제가 해결되었을 때 쉽게 해결 방법을 제거 할 수 있습니다. 위의 경우 파일을 텍스트로로드하고 중복 태그가있는 노드를 찾고 XML 텍스트에서 전체 노드를 제거하면됩니다.

웹 서비스 공급자에게 알리고 기다리십시오. 잘못된 XML을 반환하는 경우 모든 파서가 막히고 막히면 곧 고칠 인센티브가 있어야합니다.

1

아니요, 일반 XML 구문 분석기로 조작 된 XML 문서의 일부를 무시할 수 없습니다. Flex 컴파일러에게 구문 오류를 무시하고 코더가 실제로 의도 한 바가 무엇인지 알아내는 것과 같습니다. 기형이 무엇인지, 무시할 수있는 것을 추측하려고하는 파서를 작성해야합니다.

솔직히, 나쁜 XML을 보내는 웹 서비스, 베타 버전도 신뢰할 수 없습니다. 이는 프로그래밍 방식의 클래스를 사용하는 대신 "손으로"XML을 작성한다는 의미입니다. 누구나 그렇게하는 것은 다른 많은 오류, 특히 회귀를하게 될 것입니다. 당신의 시간은 그들에게 의존하기에는 너무 귀중합니다.

건배

+0

코드 의미를 추측하도록 컴파일러에 요청하는 것과 전혀 다릅니다. 예를 들어 파스 트리에서 조작 된 노드를 잘라내 버려 버리면 해당 분기의 데이터를 신경 쓰지 않고 더 나은 방법이 없다는 것을 알 때 완벽하게 합리적입니다. 실제 프로그래머는 항상 데이터 소스를 선택하고 완벽하게 규격을 준수하는 데이터를 다루는 사치를 누리지 못합니다. (아마도 당신의 상사가 X 사와 일하기로 결정 했으므로 그것에 대해 할 수있는 일은 없습니다.) 때로는 일을하기 위해 함께해야하는 데이터가 좋지 않은 경우가 있습니다. –

관련 문제