문제

긴 질문 - 저와 함께 해주세요!

네임 스페이스와 스키마로 XML 문서를 프로그래밍 방식으로 만들고 싶습니다. 같은 것

<myroot 
    xmlns="http://www.someurl.com/ns/myroot" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.someurl.com/ns/myroot http://www.someurl.com/xml/schemas/myschema.xsd">

    <sometag>somecontent</sometag>

</myroot>

나는 다소 화려한 새로운 LINQ 물건을 사용하고 있으며 (나에게 새로운) Xlement를 사용하여 위의 일을하기를 바랐습니다.

내 객체에 ToxElement () 메소드가 있습니다.

  public XElement ToXElement()
  {
     XNamespace xnsp = "http://www.someurl.com/ns/myroot";

     XElement xe = new XElement(
        xnsp + "myroot",
           new XElement(xnsp + "sometag", "somecontent")
        );

     return xe;
  }

따라서 네임 스페이스를 올바르게 제공합니다.

<myroot xmlns="http://www.someurl.com/ns/myroot">
   <sometag>somecontent</sometag>
</myroot>

내 질문 : 스키마 XMLNS : XSI 및 XSI : Schemalocation 속성을 어떻게 추가 할 수 있습니까?

(BTW 콜론을 사용하는 데 오류가 발생할 때 간단한 xatttributes를 사용할 수 없습니다. ":"속성 이름에서 ...)

아니면 XDocument 또는 다른 LINQ 클래스를 사용해야합니까?

감사...

도움이 되었습니까?

해결책

이것으로부터 기사, 그것은 당신이 하나 이상의 xnamespace를 새로워지고 루트에 속성을 추가 한 다음 두 xnamespaces를 사용하여 마을로 가십시오.

// The http://www.adventure-works.com namespace is forced to be the default namespace.
XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
    new XAttribute("xmlns", "http://www.adventure-works.com"),
///////////  I say, check out this line.
    new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
///////////
    new XElement(fc + "Child",
        new XElement(aw + "DifferentChild", "other content")
    ),
    new XElement(aw + "Child2", "c2 content"),
    new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);

여기에 있습니다 포럼 게시물 회로 세로를 수행하는 방법을 보여줍니다.

다른 팁

David B 덕분에 - 나는이 모든 것을 이해하는지 확신하지 못하지만이 코드는 내가 필요한 것을 얻는다 ...

  public XElement ToXElement()
  {
     const string ns = "http://www.someurl.com/ns/myroot";
     const string w3 = "http://wwww.w3.org/2001/XMLSchema-instance";
     const string schema_location = "http://www.someurl.com/ns/myroot http://www.someurl.com/xml/schemas/myschema.xsd";

     XNamespace xnsp = ns;
     XNamespace w3nsp = w3;

     XElement xe = new XElement(xnsp + "myroot",
           new XAttribute(XNamespace.Xmlns + "xsi", w3),
           new XAttribute(w3nsp + "schemaLocation", schema_location),
           new XElement(xnsp + "sometag", "somecontent")
        );

     return xe;
  }

네임 스페이스와 문자열을 연결하는 것 같습니다.

w3nsp + "schemaLocation"
호출 된 속성을 제공합니다
xsi:schemaLocation
결과 XML에서 필요한 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top