2011-05-01 6 views
2

Linq에서 동일한 네임 스페이스에 두 개의 접두어를 사용하는 방법이 있습니까? 예를 들어, "foo1"과 "foo2"아래에 두 개의 접두어가 있는데, 내 문서에서 사용하려는 네임 스페이스를 가리키고 있습니다. 어떻게해야합니까? 나는 일관성을 유지하기 위해 요소의 유사한 정의와 usuage를 사용할 수 있도록하고 싶습니다# linq xml 동일한 네임 스페이스에 두 개의 접두사를 사용하는 방법

string foo = "http://foo"; 
string bar = "http://bar"; 

string foo1 = "foo1"; 
string foo2 = "foo2"; 

XName Begin = "{" + foo + "}" + "Begin"; 
XName Child = "{" + foo + "}" + "Child"; 
XName Name = "{" + foo + "}" + "Name"; 
XName SomeBarElement = "{" + bar + "}" + "SomeBarElement"; 

:

<foo1:Begin foo2:Name="somevalue" xmlns:foo1="http://foo" xmlns:foo2="http://foo" xmlns="http://bar"> 
    <foo1:Child foo2:Name="somename" /> 
    <SomeBarElement /> 
</foo1:Begin> 

모든 내 코드에서 나는 같은 요소를 정의합니다. - 심지어하지 않을 경우, 그것은 논리적으로 다른 접두사를 사용하여 요소를 분리하는 의미가 네임 스페이스 나중에 변경 될 수 있기 때문에

XElement doc = new XElement(Begin, 
    new XAttribute(XNamespace.Xmlns + foo1, foo), 
    new XAttribute(XNamespace.Xmlns, bar), 
     new XElement(Child, new XAttribute(Name, "somename")), 
     new XElement(SomeBarElement) 
    ); 

내가이 접두사가 필요합니다 : 나는이 접두사를 해달라고 어디서나 내가 좋아하는 뭔가.

+0

왜 그런 요구 사항이 있습니까? –

+1

동일한 네임 스페이스의 요소를 논리적으로 분리하는 것이 적절하기 때문에 두 개의 접두사가 필요합니다. 그럼에도 불구하고, 이것은 기술적으로 유효한 XML이기 때문에, linq은 그렇게하는 어떤 방법을 허용해야합니까? – Raj

+0

왜 오늘 네임 스페이스가 같아야합니까? – Tormod

답변

1

네, 동일한 네임 스페이스에 두 개의 접두사를 사용할 수 있습니다. 같은 값을 가진 두 개의 네임 스페이스를 사용하면됩니다.

var bar = XNamespace.Get("http://bar"); 
var foo1 = XNamespace.Get("http://foo"); 
var foo2 = XNamespace.Get("http://foo"); 

var x = new XElement(foo1 + "begin", 
    new XAttribute(foo2 + "Name", "somevalue"), 
    new XElement("child", new XAttribute(foo2 + "Name", "somevalue")), 
    new XElement(bar + "barElement")); 

그러나 만약 당신이 사용하는 XML 네임 스페이스 접두사를 제어 할 수 LINQ - 투 - XML; 네임 스페이스 접두사를 제어하려면 이 필요 없습니다. 당신이 볼 수 있듯이, 세 네임 스페이스를

<begin p1:Name="somevalue" xmlns:p1="http://foo" xmlns="http://foo"> 
    <child p1:Name="somevalue" xmlns="" /> 
    <barElement xmlns="http://bar" /> 
</begin> 

이 XML은 렌더링 모두 xmlnsxmlns:p1http://foo URI를 참조하십시오. 그러나 LINQ-to-XML에 접두사 인 foo1, foo2 등을 알려주는 방법이 없습니다.

XML 네임 스페이스 접두사로 시작하는 것은 불필요한 해킹입니다. 코드는 구체적인 prefxies에 의존해서는 안됩니다. XML 문서 자체를 읽으면 구문 분석시 결정해야합니다.

관련 문제