2013-02-12 2 views
9

내가 시도 :XDocument에 대해 xmlns를 지정하는 방법은 무엇입니까?

textBox1.Text = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), 
    new XElement("root1", new XAttribute("xmlns", @"http://example.com"), new XElement("a", "b")) 
).ToString(); 

하지만 내가 얻을 : (내가 찾은 답에 따라)

The prefix '' cannot be redefined from '' to 'http://example.com' within the same start element tag. 

가 나는 또한 대체 시도 :

XAttribute(XNamespace.Xmlns,... 

을 그러나뿐만 아니라 오류가 발생했습니다.

참고 : 문서에 xmlns가 두 개 이상 없습니다.

+2

어쩌면 당신을 위해이 일 : http://stackoverflow.com/a/2874572/1373170 –

답변

20

XDocument API가 네임 스페이스 범위의 이름과 작동하는 방식은 XName 인스턴스입니다. XML 이름이 단순한 문자열이 아니라 범위가 지정된 식별자라는 사실을 받아 들일 때만 사용하면 상당히 쉽습니다. 여기에 내가 그것을 할 방법은 다음과 같습니다

var ns = XNamespace.Get("http://example.com"); 
var doc = new XDocument(new XDeclaration("1.0", "utf-8", null)); 
var root = new XElement(ns + "root1", new XElement(ns + "a", "b")); 
doc.Add(root); 

결과 : + 운영자가 XNamespaceString가와 XName 인스턴스를 결과를 받아들이는 오버로드

<root1 xmlns="http://example.com"> 
    <a>b</a> 
</root1> 

참고.

+1

감사합니다. 네임 스페이스를 한 번만 추가하는 _simple_ 방법이 없기 때문에 이상하게 보입니다. – ispiro

+1

글쎄, 이건 상당히 간단하다고 생각해. 네가하고있는 일은 문자열뿐 아니라 네임 스페이스 이름을 만드는 것인데, 정말 고향이라고 생각한다. 네임 스페이스에 대한 코드를 줄이려면'System.Xml.XmlDocument' 클래스는 네임 스페이스 관리자를 사용하여 루트 네임 스페이스를 추적합니다. 일단 설정을 올바르게하면 네임 스페이스 관리자가 존재하지 않는 것처럼 가장 할 수 있습니다. – codekaizen

+0

내 다음 질문보기 : http://stackoverflow.com/questions/14841517/how-can-i-add-innerxml-without-it-being-modified-in-anyway- 나는'XmlDocument'를 시도하고있다. 그리고 그것은 도움이되지 못합니다. – ispiro

관련 문제