2013-07-02 1 views
6

나는이처럼 보이는 XML 문서를 생성 할 수 있어야합니다 : 불행하게도다른 접두사/네임 스페이스가있는 xml 특성을 C#에 추가하려면 어떻게해야합니까?

XmlDocument doc = new XmlDocument(); 

XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes"); 
doc.AppendChild(declaration); 

XmlElement root = doc.CreateElement("rootprefix:rootname", nameSpaceURL); 
root.SetAttribute("schemaVersion", "1.0"); 

root.SetAttribute("firstprefix:attrOne", "first attribute"); 
root.SetAttribute("secondprefix:attrTwo", "second attribute with different prefix"); 

doc.AppendChild(root); 

, 내가 두 번째 접두사와 두 번째 속성 받고 있어요 무엇 : 여기

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<rootprefix:rootname 
    noPrefix="attribute with no prefix" 
    firstprefix:attrOne="first atrribute" 
    secondprefix:attrTwo="second atrribute with different prefix"> 

    ...other elements... 

</rootprefix:rootname> 

내 코드입니다 접두어가 전혀 없습니다. 그것은 단지 "attrTwo"입니다 - schemaVersion 속성과 같습니다.

그래서 C#의 루트 요소에서 속성에 다른 접두어를 사용할 수 있습니까?

답변

2

이것은 단지 가이드입니다. 당신이 할 수있는 일 수 있습니다

 NameTable nt = new NameTable(); 
     nt.Add("key"); 

     XmlNamespaceManager ns = new XmlNamespaceManager(nt); 
     ns.AddNamespace("firstprefix", "fp"); 
     ns.AddNamespace("secondprefix", "sp"); 

     root.SetAttribute("attrOne", ns.LookupPrefix("fp"), "first attribute"); 

     root.SetAttribute("attrTwo", ns.LookupPrefix("sp"), "second attribute with different prefix"); 

이 발생합니다 :

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <rootprefix:rootname schemaVersion="1.0" d1p1:attrOne="first attribute" d1p2:attrTwo="second attribute with different prefix" xmlns:d1p2="secondprefix" xmlns:d1p1="firstprefix" xmlns:rootprefix="ns" /> 

희망이 어떤 도움이 될 것입니다!

+0

NameTable 및 AddNameSpace는 당신이보다는 기본 명명 규칙을 네임 스페이스의 속기를 결정해야하는 경우에만 필요하다는 지적 가치 (d1p1, d1p2, ...) –

0

a post on another question이 문제를 해결했습니다. 기본적으로 모든 XML이 들어있는 문자열을 만든 다음 XmlDocument의 인스턴스에서 LoadXml 메서드를 사용했습니다.

string rootNodeXmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"  
    + "<rootprefix:rootname schemaVersion=\"1.0\" d1p1:attrOne=\"first attribute\"" 
    + "d1p2:attrTwo=\"second attribute with different prefix\" xmlns:d1p2=\"secondprefix\"" 
    + "xmlns:d1p1=\"firstprefix\" xmlns:rootprefix=\"ns\" />"; 
doc.LoadXml(rootNodeXmlString);