2009-11-25 3 views
0

HTML 블록에 0 개의 텍스트 노드가 있는지 알아 보는 방법은 무엇입니까?HTML 블록에 텍스트 노드가 포함되어 있지 않은 경우 그림을 그리는 방법

이 :

<p>Stuff</p><div><span>other stuff</span></div> 

두 가지가 포함되어

<p><div><span></span></div></p> 

이 반면 제로 텍스트 노드가 포함되어 있습니다.

또한 HTML이 XHTML 호환이며 내용의 크기가 4k 미만인 것으로 보장됩니다. .net을 사용하고 있습니다. 서버 쪽 제안이 있으면 C#으로 만들어주십시오. 내가 XmlDocument에 물건을로드하고 비어 있지 않은 XmlText 노드를 찾는 DOM 트리를 가로 지르지 만, 속도가 가장 중요한 관심사이기 때문에 최후의 수단이 될 것이라고 생각합니다.

답변

1

나는 정확히 당신이 제안하는대로하겠다. - 비어 있지 않은 XMLText 노드를 찾는다. XML은 일관된 어휘 양식 (예 : 인용, 공백, CDATA 모두 문제를 일으킴)이 없음을 기억하십시오. 시도 할 때까지 DOM을 사용하면 성능이 저하된다는 것을 알고 있습니까?

업데이트 XmlDocument (또는 XDocument)를 사용할 필요가 없습니다. 이 문제를 해결할 많은 도구가 있습니다. StAX http://en.wikipedia.org/wiki/StAX - 스트리밍 XML 파서와 같은 것들을 보겠습니다. 비어 있지 않은 텍스트 노드를 치면 바로 할 수 있습니다. XML 커뮤니티는 성능 최적화에 많은 노력을 기울이고 있습니다. Saxon (http://saxon.sourceforge.net/) 또는 libxml2 (http://xmlsoft.org/)에 필요한 것이 있습니다. "libxml2 프로그래밍은 이국적인 낯선 사람의 스릴있는 포옹과 같습니다." 순례자를 기념하십시오.

XML-DEV (http://www.xml.org/xml-dev/ - 내가 제안한 것을 언급 해주십시오)에 대한 질문을하는 경우, 명확하고 유용한 제안을 얻지 못하면 실망하게 될 것입니다.

+0

불행히도 XmlDocument 개체를 사용하여 제 첫 번째 선택 항목이 아닌지 충분히 알았습니다. 그러나 그것은 나의 유일한 선택 일 수 있습니다. –

1

HTML의 특정 블록이 주어지면 <, > 및 공백 인 모든 것을 제거하고 나머지 문자열이 비어 있는지 확인할 수 있습니다. 그 방법은 정규 표현식을 처리하는 모든 언어에서 작동,하지만 여기에 자바 스크립트의 예입니다 : 내가 잘못 본게 아니라면

var isEmpty = someNode.innerHTML.replace(/<[^>]+>/g, "").replace(/\s/g, "") == "" 
+0

html에 대한 정규식은 EEEvil입니다! http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – RCIX

+0

은 * true *입니다.그것은 여전히 ​​내가이 특정 문제를 해결할 수있는 방법입니다. 즉,이 특정 요구 사항에 부딪혔다면, 표현 자체가 어떤 일이 벌어지고 있는지 이해할 필요가 없습니다. 덜 사용하기 위해 의도 된 less-than-signs를 이스케이프 처리하지 않은 채로 파손될 가능성이 있으며 그보다 더 큰 부호가 뒤 따른다는 것은 사실이지만 html 자체도 마찬가지입니다 * –

0

, 당신은 Internet Explorer에서 innerText와 속성을 (사용할 수 있어야이이있다 다른 브라우저에서와 마찬가지로, 나는 그 이름을 기억할 수 없다) 빈 문자열과 비교한다.

두 번째 생각에서이 속성은 공백을 제거 할 수 있지만 그만한 가치가 있습니다.

+0

innerText는 IE 전용 속성입니다. corss-browser equivalent는 없습니다. –

0

정규 표현식을 사용하지 않는 이유는 다음과 같습니다.

다음 HTML은 HTML 4.01 유효성 검사를 통과합니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<title>demo</title> 
<div><p class=">" ></div> 

someNode가 div 인 경우, d' 정규식은 실패합니다. regex가 단순한 유효한 HTML조차도 대처할 수 없다면 잘못된 마크 업으로 어떤 기회가 있을까요?

+0

나는 당신의 요점을 이해하지만,이 상황의 가능성은 내 상황에 거의 가깝다. XHTML은 도구 (TinyMCE)에 의해 생성되며 사용자가 편집 할 수 없습니다. –

관련 문제