2014-04-16 3 views
1

나는 다음과 같은 방법으로 XML 파일 생성 일부 생산 코드가에 DOCTYPE 요소를 삽입하는 방법 :을 XmlDocument

  1. 는 XmlAttributes와 클래스의 인스턴스와 XmlSerializer를 사용하여 문자열을 생성을
  2. 생성 된 XmlDocument 단계 1에서 생성 된 문자열
  3. 쓰기와 LoadXml()를 사용하여

그것은 현재 요구되는 StringWriter를 배치 XmlWriter를 사용하여 파일을하도록하는 DOCTYPE의 declarat 이온이 포함되어 있습니다. 가능한 한 코드를 변경하고 싶습니다.

지금까지이 일을 관리해야하는 유일한 방법은 다음과 같습니다

tx.WriteDocType("entitytype", null, "http://testdtd/entity.dtd", null);      
foreach (XmlNode node in document) 
{ 
    if (node.NodeType == XmlNodeType.XmlDeclaration) 
    { 
    document.RemoveChild(node); 
    } 
} 
document.WriteTo(tx); 

이 해킹의 비트를 것 같다 - 나는 DOCTYPE 선언을 삽입 할 수있는 더 좋은 방법이 있나요? 특히 LoadMml() 호출에 의해 생성 된 XmlDocument에 XmlDeclaration을 사용하는 것을 피할 수있는 방법이 있습니까?

답변

1

아마 더 많은 변환 단계가 필요하지만 직렬화에서 다음과 같이 구성된 XmlWriterSettings의 인스턴스를 사용하여 xml 선언을 제거 할 수 있습니다.

var iSettings = new XmlWriterSettings{ OmitXmlDeclaration = true }; 
+0

제안 해 주셔서 감사합니다. XmlWriter로 작성할 때 XML 선언을 포함하려고합니다. 문제는 LoadXml()에 의해 생성 된 XmlDocument에 추가되는 XML 선언입니다. WriteDocType()을 사용하여 DOCTYPE을 추가하려면 먼저 제거해야합니다. – TonE

+0

'DocType' 인포를 생성하는 것은 올바른 방법 인 것 같습니다. – Codor

+0

OmitXmlDeclaration 설정을 인식하지 못했으며 다른 접근 방식을 제공합니다. 더 많은 단계/변경이 필요하고 어떤 청소기도 느끼지 않기 때문에 나는 원래의 방법을 고수 할 것입니다. – TonE