2014-11-24 7 views
0

<data>some 'text'</data>과 같은 것이 있다고 가정 해 봅시다. expat는이 문제를 해석하는 데 문제가 없습니다.
이제 : <data>'<some text>'</data>이 일치하지 않는 태그에 대해 괴롭 히면 <이 발견됩니다.Expat이 '<' or '>'이 텍스트 섹션에있는 경우

불행히도 나는 더 이상 시작 태그가 없으므로 불행히도 <>을 모두 피할 수는 없으므로 not well-formed이됩니다. 이 문제를 해결할 수있는 간단한 방법이 있습니까? 생각할 수있는 유일한 방법은 정규 표현식을 <>에서 인용문 내에있는 경우 이스케이프 처리하는 것입니다.

편집 : 파괴의 실제 부분이 :

<script type='text/javascript'> 
(function() { 
var useSSL = 'https:' == document.location.protocol; 
var src = (useSSL ? 'https:' : 'http:') + 
'//www.googletagservices.com/tag/js/gpt.js'; 
document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>'); 
})(); 
</script> 
+4

손상된 XML이 있습니다. 파서를 깨뜨리지 않고 xml을 수정해야합니다. ''은 무효 인 속성'data'을 가진'some' 싱글 톤 태그로 나타나기 때문에 유효하지 않습니다. –

+0

XML을 변경하고 싶을만큼 많이 할 수 없습니다. 나는 웹 사이트에서 xhtml을 파싱 중이며 해킹 된'document.write (' ZWiki

+0

@ZWiki로 갈라 놓았다 .XHTML은 유효하지 않을 것이다. document.write (' stuff가 cdata 섹션 안에 있습니다. 문제를 일으키는 예제 페이지의 URL을 제공하십시오. – ekhumoro

답변

2

나쁜 (X) HTML이 예 모든 일치 규칙은 매우 명백 보인다 가정 : 그들은 것처럼 당신은 script 태그를 처리 할 cdata. 이는 유효하지 않지만 파싱하기 전에 페이지에 작성하고 적용 할 수있는 비교적 간단한 것을 제공합니다. 여러분은 시체, 시체 안의 꺽쇠 괄호 또는 기타 적절한 것을 cdata-fy script 할 수 있습니다. 그럼 당신은 당신이 성공적으로 구문 분석 할 수있는 유효한 마크 업을 가질 것입니다 (또는 아마도 여러분은 다음 에러를 처리 할 것입니다). (당신은 구문 분석을 넘어 데이터로 뭘 하려는지 몰라도, 가장 가능성이 아무도 너무 많이 더 구체적으로 무엇을 제안 할 수 없습니다.)


당신이 제안 규칙을 "<>을 탈출하는 정규 표현식을 따옴표 안에 발견되면 분명히 작동하지 않을 것입니다.

<div id='normal'>Here is some '<div id='quoted'>quoted</div>' text</div> 
<div id='normal'>Here's some '<div id='quoted'>quoted</div>' text</div> 

을 그리고 심지어 당신이 제안하고있는 언어가 모호하지 않았다하더라도, 그것은 여전히 ​​일반 언어되지 않을 것 문제 이외의 :이 두 조각에 영향을 미치는 방법을 고려한다.


또한 실제로 이것이 처음부터 XML인지 여부를 묻는 것이 좋습니다. XHTML 인 경우 추가 문제가 발생합니다 (예 : document.write). XHTML DOM에 존재하지 않습니다. HTML5에 대한 XML 직렬화 프로파일 일 수도 있지만 HTML5 또는 HTML 4.01 일 수도 있습니다.이 경우 XML로 파싱하지 않아야합니다.


자유로운 파서를 사용하는 것도 좋습니다. beautifulsoup4을 각 파서와 함께 사용하면 (XML, HTML 모드 및 HTML5 모드에서 lxml, html.parserhtml5lib) 일관되게 작동하는 패키지가 깨진 마크 업에 대한 좋은 빠른 & 수 있습니다.

+0

'XHTML을 기반으로합니다.'. 나는 웹 사이트에 대해 많이 모른다. 그래서 나는 그 모든 것들이 중요하다고 생각하지 않았다, 나는 단지 그것을 빠른 나무 구조로 파싱하려고 시도했다. – ZWiki

+0

@ZWiki : 첫째로, 질문에 넣어서 우리는 짐작할 필요가 없다. . 두 번째로, 구문 분석 할 수 있다고 가정하기 전에 온라인 XHTML 유효성 검사기를 페이지에 대해 실행 해보십시오. (유효성 검사기가 JS에서 DOM 오류를 잡아낼 가능성은 없지만 ...) – abarnert

+0

@ZWiki. 그러나 ** 유효 ** xhtml이 아니므로 구문 분석 할 수 없습니다. 이와 같은 정크 페이지를 빠르게 파싱하려면 [BeautifulSoup] (http://www.crummy.com/software/BeautifulSoup/)와 같은 것을 사용하십시오. – ekhumoro