2011-10-28 3 views
1

JSOUP (XML 파일 용 Java 도구)을 사용하고 있으며 다음 코드를 사용하여 XML 파일에 저장된 URL을 읽습니다. 여기 내 코드는 다음과 같습니다JSOUP에서 어떻게 탈출 모드를 비활성화 할 수 있습니까?

Document d = Jsoup.parse(new File("feed.xml"), null); 
Element elementCat = d.getElementsByTag("cat").get(0); 
String stringUrl = elementCat.ownText(); 
System.out.println(stringUrl); 

XML 입력 파일은 다음과 같다 :

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<root> 
<cat>http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event&Lang=P</cat> 
</root> 

내 문제는 프로그램의 출력이 있다는 것이다 : = 대신의 P http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event«: http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event&Lang=P

즉, "& Lang"을 자동으로 "«"로 변환합니다. "⟪"이 아니므로 세미콜론 없이는 "& Lang"입니다. 인코딩 또는 이스케이프를 비활성화하고 원시 데이터를 원합니다.

이 문제를 어떻게 해결할 수 있습니까?

+2

jsoup가 XML 대신 HTML 용으로 제공되지 않습니까? –

+0

당신이 옳다고 생각합니다. 그러나 JSOUP은 XML 작업을위한 강력한 기능을 가지고 있으므로 사용하지 못하게하고 싶습니다. – Soheil

답변

3

XML이 있습니다. XML에는 마크 업을 이스케이프 처리하는 방법이 있습니다. 때로는 < 또는 그 값에 " 인 속성이 포함 된 텍스트가 필요하기 때문에 마크 업을 이스케이프 처리하는 방법이 있습니다. 이스케이프 처리는 앰퍼샌드, 코드, 세미콜론으로 시작하는 문자 엔터티 참조를 사용하여 수행됩니다. 이렇게 : &lt;. 그것은 <을 나타낼 수 있습니다.

물론, 이는 앰퍼샌드 자체의 문제로 남겨 둡니다. 실제로 다른 앰퍼티 엔티티가 아닌 앰퍼샌드 인 경우 다음과 같이 인코딩해야합니다 : &amp;.

올바른 형식이 아닌 XML이 있습니다. &은 캐릭터 엔티티 참조를 시작했음을 나타내지 만, Lang이 표시됩니다. 자, 아마도 jsoup는이 문제의 많은 부분을 만들지 않습니다. 하지만 XML 구문이 아닌 HTML 파싱을위한 것이기 때문입니다. HTML은 XML보다 약간 관대하기 때문에, jsoup는 다른 것에서 알려지지 않은 문자 참조가 될 수있는 부분을 단순히 대문자로 가정합니다. 가능성이있는 문자는 nul입니다.

XML 형식이 올바른지 확인하십시오. 그렇게 할 수 없다면 XML로 취급하지 말고 HTML로 취급하십시오. XML 처리가 사용자가 수행 한 작업이면 SAX, StAX, DOM 또는 JAXB를 살펴보십시오.

+0

Hoooray, 해결했습니다. 당신 말이 맞아요. 내 XML 파일의 형식이 올바르지 않습니다. 변경됨 http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event&Lang=P 부엉이 http://www.isna.ir/ISNA/FullNews.aspx?SrvID=Event & Lang = P 및 it 작업. – Soheil

+0

올바른 형식의 XML을 입력으로받을 수 있다면 jsoup를 사용하여 합리적으로 안전하다고 생각할 것입니다. –

관련 문제