2010-02-21 1 views
2

토큰 화 된 HTML 문서가 있다고 가정합니다. 어떻게 새 문서로 변환하거나 다른 변환을 적용 할 수 있습니까?HTML 토큰 스트림을 새 문서로 다시 쓰는 방법은 무엇입니까?

예를 들어, 나는이 HTML이 있다고 가정

내가 현재 무엇을 쓸
<html> 
<body> 
    <p><a href="/foo">text</a></p> 
    <p>Hello <span class="green">world</span></p> 
</body> 
</html> 

토큰의 스트림을 출력하는 토크 나이입니다.

TAG_OPEN[html] TAG_OPEN[body] TAG_OPEN[p] TAG_OPEN[a] TAG_ATTRIBUTE[href] 
TAG_ATTRIBUTE_VALUE[/foo] TEXT[text] TAG_CLOSE[a] TAG_CLOSE[p] 
TAG_OPEN[p] TEXT[Hello] TAG_OPEN[span] TAG_ATTRIBUTE[class] 
TAG_ATTRIBUTE_VALUE[green] TEXT[world] TAG_CLOSE[span] TAG_CLOSE[p] 
TAG_CLOSE[body] TAG_CLOSE[html] 

하지만 지금 내가 약간의 변형을 만들려면이 스트림을 사용할 수있는 방법에 대해 어떤 생각을 가지고 있지 않습니다 그들은 (의사 코드로 작성) 될이 문서하십시오.

예를 들어, TAG_OPEN[a] TAG_ATTRIBUTE[href]TAG_ATTRIBUTE_VALUE[/foo]을 다시 쓰고 싶습니다.

내가하고 싶은 또 다른 변화는

<a href="/foo">text</a> 

일을하기위한 일반적인 전략은 무엇

<a href="/foo">text</a>(/foo) 

에 다시 도착, 예를 들어, TAG_ATTRIBUTE[href] 속성 괄호 안에 TAG_OPEN[a] 후에는 출력 할 것입니다 그러한 변형? 모든 태그를 제거하고 TEXT 컨텐츠를 남기거나, 특정 태그 뒤에 태그를 추가하는 등의 다른 많은 변환이 있습니다.

구문 분석 트리를 만들어야합니까? 나는 그것을 한 번도 해본 적이 없으며 토큰 스트림으로부터 파스 트리를 생성하는 방법을 모른다. 아니면 어떻게해야할까요?

모든 의견을 환영합니다.

그리고 한 가지 더 - 저는이 모든 것을 스스로 파싱하여 배우고 싶습니다. 그래서 도서관을 찾고있는 것이 아닙니다! 우리가 HTML을 XML을 준수한다고 가정 할 경우

감사합니다 사전에, Boda의 Cydo

답변

0

후 XSLT 갈 방법이 될 것입니다. 하지만 당신이 파서를 쓰고 싶어하는 것처럼 보이는 것은 틀림없는 것입니다. 정말로 파서를 작성하려면 (필자의 파서 엔진이 아닌 구문 분석 규칙을 작성하십시오) antlr과 MS oslo를 살펴보십시오.

+0

나는 이것들과 같은 변형을하는 법을 배우기를 원합니다! – bodacydo

+0

당신에게 더 많은 힘이 있습니다. 잘못된 도구/패러다임을 사용하여 잘못된 방향으로 가고 있다고 생각하십시오. – brian