2011-05-11 2 views
4

파서를 통과해야하는 xml 문자열을 받았습니다. 현재 불법적 인 XML 문자 때문에 불평하고 있습니다. 아주 간단한 예 :xml을 구문 분석에 안전하게 만들려면 어떻게해야합니까 (& 안에 문자가 포함되어있을 때)?

<someXml>this & that</someXml> 

내가 솔루션 &amp;으로 &를 대체하는 것을 알고,하지만 난 XML을 생성하고 있지 않다 따라서 값을 제어 할 수 없습니다. 간단한 문자열 대체

는 XML에서 특별한 의미를 가지고 있으며, 전역에 '&'의 교체 '&'이후 이것에 대한 올바른 방법이 아니다 '& A;' 의도 된 특별한 의미를 망칠 것입니다. 전체 XML 문서를 가져 와서 '&'이 '& amp;'이되도록 '수정'할 수 있습니까? 전 세계적으로 '&'을 '& amp; '(양쪽에 공백이 있음)?

+0

주어진 문자열은 NOT xml이므로 오류 메시지에 관심이 없으면 XML 파서에 넘겨주는 것이 아닙니다. 비 XML 데이터를 처리하려면 비 XML 파서가 필요합니다. –

+0

좋은 지적입니다. 제 목표는 위의 내용을 유효한 XML로 변환 한 다음 구문 분석하는 것입니다. (또는 당신이 말하는 것처럼 비 XML 파서를 사용하여 파싱한다.) –

답변

4

나는 실제 상황에서 실제로 일어날 수있는 상황이기 때문에 이것은 흥미로운 질문이라고 생각합니다. XML 공급자가 XML을 수정하고 유효하게 할 것을 요구하는 것이 옳다고 믿지만, 나는 하나의 옵션이 관대 한 파서로 시도하고 있다고 생각했다. 나는 약간의 검색을했는데이 blog post이 같은 문제에 대해 이야기하고 내가 생각했던 것과 같은 해결책을 제안했다. jsoup으로 시도해보십시오. 이것을 반복하는 것이 가장 좋은 방법은 아니라고 생각합니다. XML 공급자에게 문제를 해결하도록 요청해야합니다.

+0

MarcoS에게 감사드립니다. 관대 한 파서에 대한 생각이 마음에 들지만, 나는 당신이 옳다고 생각합니다. 정말로 돌아 가야합니다. 공급자에게 알맞게 형식화 된 XML을 요구하십시오! –

0

XML 문자를 삭제 (인코딩)하므로이 작업을 수행 할 수 없습니다. 코드를 XML을 생성하는 라이브러리로 다시 작성해야합니다.

0

이 질문에서 직접 XML을 제작할지는 확실하지 않지만, 그렇다면 XML 라이브러리를 사용하여 인코딩 작업을 올바르게 처리 할 수 ​​있습니다.

그러나 이것은 XML의 일부인 것처럼 들리므로 Apache Commons Lang을 사용하여이 작업을 수행하는 것이 좋습니다. 그것은 당신이 찾고있는 메소드, escapeXml (String)을 가진 'StringEscapeUtils'클래스를 가지고 있습니다.

+0

감사합니다 nicolas. 나는 xml을 직접 만들지 않을 것이다. (또는 쉬운 수정이 될 것이다.) 그래서 불행하게도 StringEscapeUtils는 나를 위해 작동하지 않을 것이다 .. –

+0

StringEscapeUtils는 당신이 가지고있는 String과 같이 전달 된 String에서 작동 할 것이다. 하지만 이제는 생각해 보았습니다. 전체 XML 문서를 전달하면 모든 것을 피할 수 있습니다! 아마 당신이 찾고있는 것이 아닙니다 ... –

0

추가 XML 콘텐츠가있는 XML 태그 안에 CDATA 섹션을 사용하지 않는 이유는 무엇입니까? 그렇다면 고독한 앰퍼샌드는 문제가되지 않습니다.

+0

XML을 생성하지 않는다는 것을 제외하면이 코드는 작동합니다 : ( –

8

이 문서의 공급자에게 수정을 요청하는 것이 좋습니다. 그대로, 이 아닌 (유효한) XML! XML 형식으로 커밋 한 경우 수정해야합니다.

관련 문제