2009-06-30 1 views
1

중복 예선에서 기본이 아닌 네임 스페이스 결과에 노드를 추가내가 정의 새로운 기본 네임 스페이스를 가진 요소가 포함 된 기존을 XmlDocument를 다시 작성하고

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
    <legacyCasPolicy enabled="true" /> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

내가 필요 (아래 assemblyBinding 요소 참조) 네임 스페이스를 다시 정규화하지 않고이 'assemblyBinding'요소에 새 노드를 추가 할 수 있어야합니다. 결과 파일을 app.config 파일로 처리 할 때 .Net 런타임이 Xml을 유효하지 않은 것으로 간주하기 때문입니다.

이 내가 원하는 무엇인가 :

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
    <legacyCasPolicy enabled="true" /> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 

     <dependentAssembly> 
     <assemblyIdentity name="Dependency" publicKeyToken="9f10d5ba1865867c"/> 
     </dependentAssembly> 

    </assemblyBinding> 
    </runtime> 
</configuration> 

... 부모의 네임 스페이스 inherts 'dependentAssembly'요소입니다.

을 호출 한 후 XmlDocument.CreateElement ("dependentAssembly"); 또는 XmlDocument.CreateElement ("dependentAssembly", "urn : schemas-microsoft-com : asm.v1"); 또는 XmlDocument.CreateElement ("asm", "dependentAssembly", "urn : schemas-microsoft-com : asm.v1");

나는 이런 식으로 뭔가가 계속

...

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <runtime> 
    <legacyCasPolicy enabled="true" /> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 

     <asm:dependentAssembly xmlns:asm="urn:schemas-microsoft-com:asm.v1"> 
     <asm:assemblyIdentity name="Dependency" publicKeyToken="9f10d5ba1865867c" xmlns:asm="urn:schemas-microsoft-com:asm.v1"/> 
     </asm:dependentAssembly> 

    </assemblyBinding> 
    </runtime> 
</configuration> 

내가 내가 원하는 것을 얻기 위해 어떻게해야합니까?

답변

0

.NET 3.5를 사용하는 경우 LINQ to XML을 사용할 수 있습니다. 예를 들어,이 코드 :이 XML에

XNamespace ns = "uri:ns"; 
XDocument doc = new XDocument 
    (new XElement("root", 
        new XElement(ns + "child", new XAttribute("xmlns", ns), 
           new XElement(ns + "grandchild")))); 
doc.Save("test.xml"); 

결과 :

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <child xmlns="uri:ns"> 
    <grandchild /> 
    </child> 
</root> 

내가 XmlDocument과 같은 결과를 얻는 시도하고, 지금까지 내가 실패했습니다 ...

0

버전 asm : 접두사가 있거나없는 접두어는 같습니다. 두 경우 모두 assemblyBinding, dependentAssemblyassemblyIdentity 요소는 urn:schemas-microsoft-com:asm.v1 네임 스페이스에 있습니다.

0

나는이 문서에서 XPathNavigator를에 AppendChildElement를 사용하여 시도하고 여러 네임 스페이스 선언이 방법을 추가하지 나타납니다 (예 필요한 모든 요소를 ​​추가하지 않습니다하지만 당신은 아이디어를 얻을) :

 XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(
      @"<?xml version='1.0' encoding='utf-8' ?> 
       <configuration> 
        <runtime> 
        <legacyCasPolicy enabled='true' /> 
        <assemblyBinding xmlns='urn:schemas-microsoft-com:asm.v1'> 
        </assemblyBinding> 
        </runtime> 
       </configuration> 
      ");  
     NameTable nt = new NameTable(); 
     XmlNamespaceManager nsm = new XmlNamespaceManager(nt); 
     nsm.AddNamespace("x", "urn:schemas-microsoft-com:asm.v1"); 

     XPathNavigator node = doc.CreateNavigator().SelectSingleNode("//x:assemblyBinding", nsm); 
     node.AppendChildElement("", "dependentAssembly", "urn:schemas-microsoft-com:asm.v1", ""); 

프레드

+0

사실, XmlDocument.CreateElement ("", "dependentAssembly", "urn : schemas-microsoft-com : asm.v1"); 위의 예와 같이 빈 접두사를 사용합니까? – fredw