네임 스페이스 접두사와 관련하여 특정 패턴을 따르는 코드 (LINQ to XML)를 통해 XML을 생성하려고합니다. 나는이 XML 네임 스페이스로 구성되는 다음과 같은 출력 생성 할 (사건을 설명하는 예를 들어, 속성의 순서 무관) :XElement (C#)의 중복 네임 스페이스
<name1 xmlns:space2="urn:schemas-upnp-org:namespace2/" xmlns="urn:schemas-upnp-org:namespace1/" name2="foo" space2:name4="demo">
<name3>bar</name3>
</name1>
그것은 필수적이다 namespace1 기본 네임 스페이스 (국번없이) 인 것을 및 namespace2에는 "space2"라는 접두사가 있습니다 (나도 알고 있지만 저를 비난하지 않습니다 - 그런 것들을 요구하는 표준이 있습니다).
나는 C#에서 많은 다른 접근법을 시도했다. 내가 생각할 가장 가능성은 다음과 같습니다.
public static readonly XNamespace NS1 = "urn:schemas-upnp-org:namespace1/";
public static readonly XNamespace NS2 = "urn:schemas-upnp-org:namespace2/";
public static readonly XName Name1 = NS1 + "name1";
public static readonly XName Name2 = NS1 + "name2";
public static readonly XName Name3 = NS1 + "name3";
public static readonly XName Name4 = NS2 + "name4"; // in namespace 2
void Test() {
var y = new XElement(Name1,
new XAttribute(XNamespace.Xmlns + "space2", NS2.NamespaceName),
new XAttribute(Name2, "foo"),
new XAttribute(Name4, "demo"),
new XElement(Name3, "bar"));
Trace.WriteLine(y.ToString());
}
그러나 어떤 이유로 든 잘못되었습니다. namespace1의 일부 요소에는 "p1"의 별난 접두사가 할당됩니다. 그들은 같은 네임 스페이스 참조를 사용하더라도, LINQ는 이름 1 및 NAME2가 다른 의 네임 스페이스를 생각한다는 것, 그리고 두 번 선언
이<name1 xmlns:space2="urn:schemas-upnp-org:namespace2/" p1:name2="foo" space2:name4="demo" xmlns:p1="urn:schemas-upnp-org:namespace1/" xmlns="urn:schemas-upnp-org:namespace1/">
<p1:name3>bar</p1:name3>
</name1>
문제는 내가를 할당하면 발생하지 않는 것 접두사 namespace1으로 또는 namespace2에서 속성을 제거했지만 문제가 도움이되지 않으므로 도움이되지 않습니다.
그래서 질문의 본질은 다음과 같습니다. LINQ가 XML에서 NS1에 두 개의 다른 네임 스페이스 선언을 할당하는 이유는 무엇입니까? 항상 기본 네임 스페이스에 매핑되도록 구성 할 수 있습니까?
에 대한 네임 스페이스를 지정하지 마십시오. 실제로 많은 XML 스키마 디자이너가 속성이 모두 부적합하다고 판단한 것으로 보입니다. 즉, _attributes_에서 네임 스페이스를 제거하면 문제가 해결됩니다. 감사! – micTronic