2011-12-13 2 views
2

내가 좋아하는 몇 가지 잘못된 XML 텍스트 입력을받을XML을 탈출/정리하는 Java 라이브러리? 내가 그렇게 입력을 정리할</p> <pre><code>"<Tag>something</Tag> 8 > 3, 2 < 3, ... <Tag>something</Tag>" </code></pre> <p>얻을 :

, 유지하면서도, <처럼 그 특수 기호를 탈출>이며
"<Tag>something</Tag> 8 &gt; 3, 2 &lt; 3, ... <Tag>something</Tag>" 

유효한 태그 ("<Tag>something</Tag>, 같은 대/소문자 포함)

아마도 xml/html 파서일까요? (파서는 필요 없지만 간단합니다."깨끗합니다. "절차)

+0

고아 '> 문자는 문제가되지 않습니다.그러나 특정 '<'문자가 태그인지 아닌지 아닌지를 어떻게 알 수 있습니까? XML 문서가 단일 DTD 또는 XML 스키마를 따르고 있습니까? 또는 '<* * always *> 뒤에 XML에서'Name'이 아닌 숫자와 같은 것이 있습니까? – erickson

+0

그들은 내 XML 문서가 아니며 스키마가 없습니다. 불행히도 "<"기호 뒤에 공백이나 숫자가없는 경우를 발견했습니다 ... – juanmirocks

답변

6

JTidy는 "HTML 문법 검사기 꽤 프린터. 그 이외의 자바 사촌처럼 JTidy는 잘못된 및 잘못된 HTML을 정리하는 도구로 사용될 수있다"입니다

을 그러나 그것은 또한 XML을 사용할 수 있습니다. 설명서를 확인하십시오. 믿을 수 없을 정도로 영리합니다. 아마 당신을 위해서 일할 것입니다.

0

구아바의 XmlEscaper을 확인하십시오. 버전 11의 시험판이지만 코드를 사용할 수 있습니다.

+0

(적어도 코드에서 읽은 것 이상) StringEscapeUtils.escapeXml과 마찬가지로 모든 것이 이스케이프 처리되고 적절한 태그도 있습니다. – juanmirocks

+0

'적절한 태그의 특수 기호'란 무엇입니까? –

+0

' 무언가'의 특수 기호가 이스케이프 처리되지 않아야합니다. – juanmirocks

-1

Apache Commons Lang에는 StringEscapeUtils이라는 클래스가 있으며 원하는대로 정확하게 수행 할 수 있습니다. 당신이 사용하고자하는 방법은 escapeXml입니다.

+0

아니요. 모든 태그를 이스케이프 처리하며 올바른 태그의 <,> 심볼도 이스케이프 처리합니다. 이것은 XML 구조를 이해하지 못하기 때문에 단순한 문자열 교체를 사용하기 때문입니다. – juanmirocks

+0

흠, 그것에 대해 좀 더 생각하면 ... 입력 내용으로 XML 파서를 사용하여 구문 분석하는 것이 가장 좋습니다. 필자는 문자열에서만 작동하는 도구가 태그의 일부인 < and >과 간단한 텍스트의 일부인 차이를 알고 있는지 의심 스럽습니다. 또한 파서를 사용하면 입력을 더 처리 할 수 ​​있습니다. 하지만 정확한 사용 사례를 알지 못합니다. – r3nj1

1

최상의 해결책은 텍스트 입력을 생성하는 프로그램을 수정하는 것입니다. 가장 쉬운 수정은 제안 된 다른 답변과 같은 이스케이프 유틸리티를 포함합니다. 그 옵션이 아니라면, 나는 (에 대한 기대 태그를 일치

</?[a-zA-Z]+ */?> 

같은 정규 표현식을 사용하고 태그 사이에 (당신이 변화를 통해 전달하려는) 태그와 텍스트로 문자열을 분할 것 이스케이프 메소드를 적용하고 싶습니다.)

처리중인 XML 파서가 유효한 XML이 아니기 때문에 XML 파서를 사용하지 않을 것입니다. 기존의 애매 모호함으로 인해 모호함이 생길 수 있으므로 완벽한 작업을 수행하지 못할 수도 있습니다.

+0

예, 이것이 가장 쉬운 해결책 일 것 같습니다. – juanmirocks

2

나는 그렇게 할 라이브러리를 모른다. 입력 한 형식이 잘못된 XML이며 적절한 XML 구문 분석기가이를 받아 들일 수 없습니다. 더 중요한 점은 실제 태그를 태그처럼 보이는 텍스트와 구별 할 수있는 것은 아닙니다. 그러므로 문제를 해결하기 위해 당신이 만드는 경험적 기반의 시도는 허약합니다. 즉 때때로 잘못된 XML을 생성 할 수 있습니다.

최상의 방법은 XML을 어셈블하기 전에 문제를 해결하는 것입니다.

  • DOM을 파싱 (unparsing) (예 :)하여 XML을 생성하면 비공개로 인해 이스케이프가 처리됩니다.
  • 템플릿 작성 또는 문자열 bashing으로 XML을 생성하는 경우 XML 태그가 통합되기 전에 관련 텍스트 청크에 StringEscapeUtils.escapeXml과 같은 것을 호출해야합니다.

"XML"이 어셈블 될 때까지 문제가 해결되지 않으면 제대로 고칠 수 없습니다.

+0

XML을 어셈블하지 않습니다. 맞습니다. 경험적 기반의 시도는 결국 실패 할 수 있습니다. 그러나 나는 @ gatkin과 같은 솔루션이 내가 얻는 입력을 위해 만들 것이라고 생각한다. – juanmirocks

+0

* "XML을 어셈블하지 않습니다"* - 가장 좋은 해결책은 XML이 잘못된 형식 인 것으로 거부하는 것입니다. 좋아하는 XML 유효성 검사기를 사용하여 문서 증거를 제공하십시오. 상호 운용성 표준은 표준이며, 표준을 준수하지 않는 소프트웨어는 ** 버그 **이며 수정해야합니다. –

+0

생물 정보학 데이터베이스에서 제공하는 일부 데이터를 크롤링하고 가져오고 해당 데이터를 가져와야합니다. 여전히, 나는 당신의 요점을 이해합니다. – juanmirocks

관련 문제