2010-03-18 2 views
3

우리는 SAP에서 데이터를 가져와 구문 분석하고 사용자에게 렌더링하는 JAVA 응용 프로그램을 가지고 있습니다. JCO 커넥터를 사용하여 데이터를 가져옵니다. SAX를 사용한 XML 구문 분석 | 특수 문자를 처리하는 방법?

는 최근에 우리는 예외를 던져했다 :

org.xml.sax.SAXParseException: Character reference "&#00" is an invalid XML character. 

그래서, 우리는 모든 특수/잘못된 문자가 XML을 구문 분석하기 전에 교체 간접의 새로운 수준을 쓸 계획이다. 여기

내 질문은 :

  1. XML에 잘못된 문자를 대체이 일을 기존 (오픈 소스) 유틸리티가 있나요?
  2. 그런 유틸리티를 작성해야한다면 어떻게 처리해야합니까?
  3. 왜 위의 예외가 throw됩니까?

감사합니다.

+0

JCO에서 XML로 오는 데이터가 어떻게 파싱됩니까?아니면 이름이나 무언가를 얻고 파싱 할 XML 문서에 쓰는 중입니까? – Tom

+0

@Tom : JCO에는 XML 형식의 데이터를 제공하는 Record.toXML() 메소드가 있습니다. – HanuAthena

+0

호기심에서 벗어난 이유 - 데이터를 XML로 변환 한 다음 다시 돌아 오는 모든 고통과 CPU주기를 거쳐야하는 특별한 이유가 있습니까? – vwegert

답변

0

나는 related, but opposite problem을 가지고 있는데, 여기서 문자 1을 XSLT 변환의 출력에 삽입하려고했습니다. 마커를 0으로 바꾸려면 사후 처리를 고려했지만 대신 xsl : param을 사용하기로 결정했습니다.

나는 상황에 따라 맞춤식 인코딩을 사용하여 XML에서 유효하지 않은 문자를 바꾸고 구문 분석에 특수한 경우로 처리하거나 가능한 경우 공백으로 바꿉니다.

JCO에 대한 경험이 없으므로 잘못된 문자를 대체하는 방법이나 위치에 대해 조언 할 수 없습니다.

1

내 견해로는 소스 (SAP)가 대체해야합니다. 그렇지 않으면, 당신의 programm에 전송되는 것은 XML처럼 보일지 모르지만 그렇지 않다.

교체하는 동안으로 '&' '&'대해 toXml() 호출 문자가 더 어려울 수 있습니다 다른 사람이합니다 ('<'을 대체하기에에서 문자열에 대한 간단한 String.replaceAll (...)하여 수행 할 수 있습니다 예를 들어 '>').

관련 기욤

1

그것은 자신의 이스케이프 버그 같은 소리. 컨텍스트에 따라 SAP 개발자처럼 자신의 XML 유틸리티를 작성하는 대신 실제 XML 라이브러리를 사용하는 XMLWriter 클래스의 자체 버전을 작성하는 것이 가장 좋습니다.

String goodXml = badXml.replaceAll("&#00;", ""); 
0

당신은/인코딩 비 ASCII 문자를 해독 할 수 있습니다

또는 문자 코드를보고 &는 # 00, 당신은 멀리로 얻을 빈 문자열에있는 모든 대체 할 수있을 것 Apache Commons Lang 클래스 StringEscapeUtils escapeXML 메소드를 사용하여 XML로 저장합니다. 참조 :

http://commons.apache.org/lang/api-2.4/index.html

XML 문자 참조가 작동하는 방식에 대해 읽으려면, 위키 피 디아의 "숫자 참조"에 대한 검색.