NekoHTML을 사용하여 HTML을 정리 한 다음 XOM으로 가져 와서 개체 모델을 얻습니다. 이 과정에서 어딘가에 코멘트가 빠져 나옵니다. 여기NekoHTML (또는 JTidy) + XOM으로 도망가 오는 댓글
// XOMSafeSAXParser is the Neko SAXParser extended to allow
// XOM to set the (unnecessary in this case) features
// external-general-entities and external-parameter-entities
XMLReader reader = new XOMSafeSAXParser();
Builder xomBuilder = new Builder(reader);
Reader input = ...; // file, resource, etc.
Document doc = xomBuilder.build(input);
Serializer s = new Serializer(System.out, "UTF-8");
s.setIndent(4);
s.setMaxLength(200);
s.write(doc);
s.flush();
해당 출력이다 :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML lang="en">
<HEAD>
<SCRIPT type="text/JavaScript"> <!-- // Hide the JS startTimeout(6000000, "/"); // --> </SCRIPT>
</HEAD>
여기
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<script type="text/JavaScript">
<!-- // Hide the JS
startTimeout(6000000, "/");
// -->
</script>
코드이다 : 여기
는 (명료성을 위해<head>
절단의 대부분) 입력 HTML의 중요한 예이다
XOM 문서에서 스크립트 요소를 추출하면 이미 SCRIPT 요소는 Text
노드를 자식으로 가지고 있는데, 이는 Texts
과 Comments
의 시퀀스가 아니기 때문에 나는 Serializer
이 잘못되었다고 생각하지 않습니다.
이제는 줄 바꿈이 유지되는 것을 기대하지 않고 실제로 스크립트 태그를 꺼내 겠지만 다른 곳에서는 주석을 보존하고 싶거나 이스케이프 된 주석없이 텍스트를 가져올 수 있어야합니다.
아이디어가 있으십니까?
업데이트 : NekoHTML 몇 가지 태그를 엉망으로했다, 그래서 나는 JTidy로 전환, 그리고 내가 같은 문제가 있습니다. 흥미롭게도 헤더의 스크립트 태그에 대한 문제 일뿐입니다. 다른 의견도 괜찮습니다. 그리고 JTidy의 잘못은 의심스럽고 (희망적이고기도하는) 이상한 JavaScript 주석이 있습니다.
<script type="text/JavaScript"> // <!-- // Hide the JS startTimeout(6000000, "/"); // --> // </script>
JTidy가 수행하는 작업은 <script>
내용을 CDATA로 변환하는 것처럼 보입니다. JTidy의 raw outputut를 stdout에 보내면 다음과 같이됩니다.