有一个冗长的问题 - !请多多包涵

我想以编程方式创建一个名称空间和模式的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东西(这是新的我)中,并希望能做到以上使用的XElement。

我有一个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

(顺便说一句,我不能使用简单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);

下面是一个论坛帖子展示如何做的schemaLocation

其他提示

感谢David乙 - 我不能肯定我明白这一切,但是这个代码让我什么,我需要......

  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