12

長い質問-我慢してください!

名前空間とスキーマを使用してプログラムで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クラスを使用する必要がありますか?

ありがとう...

4

2 に答える 2

7

この記事から、複数の XNamespace を新しく作成し、ルートに属性を追加してから、両方の XNamespace を使用して町に行くように見えます。

// 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);

これは、スキーマの場所を行う方法を示すフォーラムの投稿です。

于 2008-12-02T19:50:33.910 に答える
7

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で、これが必要です。

于 2008-12-03T15:09:07.410 に答える