Xlement에서 네임 스페이스 및 스키마로 XML을 만듭니다
-
22-07-2019 - |
문제
긴 질문 - 저와 함께 해주세요!
네임 스페이스와 스키마로 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에서 필요한 것입니다.
제휴하지 않습니다 StackOverflow