2012-04-17 3 views
3

에서 자동 폐쇄 태그를 내 체크 박스를 만드는거야 방법이있다 스트립 입력에 닫는 태그, 디버깅 할 때 이것을 볼 수 있습니다.HTML 민첩성 팩 입력

<input name="ttWBF_1" type="checkbox" id="ttWBF_1" autocomplete="off" class="checkbox" /> 

그것은 다음과 같은 민첩성 팩을 사용하여 HTML에 추가되는 :

HtmlNode temp = doc.CreateElement("temp"); 
temp.InnerHtml = sReplacementString; 
HtmlNode current = inputNode; 

foreach (HtmlNode child in temp.ChildNodes) 
{ 
    inputNode.ParentNode.InsertAfter(child, current); 
    current = child; 
} 
inputNode.ParentNode.RemoveChild(inputNode); 

은 그러나 HTML에 체크 박스의 입력 태그는 자동 폐쇄 슬래시 누락 때문에 WC3 유효성 검사를 실패합니다.

<input name="ttWBF_1" type="checkbox" id="ttWBF_1" autocomplete="off" class="checkbox"> 

동일한 방식으로 생성되는 내 텍스트 상자에서 발생합니다. 민첩성 팩을 사용하여 HTML을 페이지에 추가 할 때 길을 잃은 것처럼 보입니다.

어떻게 방지합니까?

+0

어떤 W3C 유효성 검사가 실패합니까? XHTML 출력을 기대하십니까? HTML은 자동 닫기 태그를 지원합니까? – sisve

+0

우리의 요구 사항은 XHTML 1.1에 대한 유효성 확인을위한 것입니다. '입력에 대한 끝 태그'가 생략되었지만 OMITTAG NO가 지정되었습니다. - 요소를 닫지 않았거나 또는 '자동 닫기'를 의미 할 수 있습니다. 즉, ">"대신 "/>"로 끝내십시오. ' – Jon

+0

WriteTo (TextWriter) 또는 WriteTo (XmlWriter)를 사용하고 있습니까? doc.OptionOutputAsXml을 설정 했습니까? – sisve

답변

3

결국 나는 그것이 정규식으로 mising self-closing 태그를 추가하기 위해 HTML을 처리하는 것으로 넘어 졌다고 말합니다.

sXHTML = Regex.Replace(sXHTML, "<input(.*?)>", "<input $1 />"); 
10

시도 설정 "OptionWriteEmptyNodes"플래그 :

HtmlDocument doc = new HtmlDocument(); 
doc.OptionWriteEmptyNodes = true; 

// .... 

UPDATE 내 원래의 대답이 거부 된 이후, 여기에 또 다른 가능한 솔루션입니다

.

렌더링하기 전에 올바른 DOCTYPE을 HTML 문서로 전달하고 있습니까? DOCTYPE을 삽입하는 방법에 대한이 질문을보십시오 : Add a doctype to HTML via HTML Agility pack

+0

이것은 이미 true로 설정되어 있습니다. =/ – Jon

+0

답변을 업데이트했습니다. – volpav

+0

예, doctype이 정확합니다. Agility Pack을 통해 추가하지 않습니다. 민첩성 팩은 HTML의 일부를 조작하는 데에만 사용됩니다. – Jon

2

이 포함 당신이 당신의 문서 노드를 만들 때이 문제를 해결해야합니다 : 그것은 수정해야하는 모든 태그에 추가 할 수있다 -이 미래 해키가 아닌 증거로 나는 더 나은 솔루션을 싶어요 :

if (HtmlNode.ElementsFlags.ContainsKey("input")) 
{ HtmlNode.ElementsFlags["input"] = HtmlElementFlag.Closed;} 
else 
{ HtmlNode.ElementsFlags.Add("input", HtmlElementFlag.Closed);} 

원래 답 : Image tag not closing with HTMLAgilityPack

1

당신이 agiliy 팩에서 노드를 무시하려나요? 예를 들어이 줄은 html 민첩성 팩이이 노드의 변경을 무시하도록 알려줍니다.

HtmlNode.ElementsFlags.Remove("meta");