2

のようなxmlが欲しい

<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schema.test.com/test">

<test1>1</test1>
.
.
.
.
<test9>9</test9>
</root>

だから私は次のコードを使用します

   Dictionary<string, object> Data = new Dictionary<string, object>();
for (int i = 0; i < 10; i++)
            {
                Data.Add("Test" + i, i);



            }

            Console.WriteLine(DateTime.Now.ToShortTimeString());


            XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
            XNamespace xsd = XNamespace.Get("http://www.w3.org/2001/XMLSchema");
            XNamespace xsd1 = XNamespace.Get("http://schema.test.com/test");


            XDocument doc = new XDocument(

                new XDeclaration("1.0", "utf-16", "yes"),

                new XElement(

                    "root",
                    new XAttribute(XNamespace.Xmlns + "xsi", xsi),
                    new XAttribute(XNamespace.Xmlns + "xsd", xsd),
                    new XAttribute(XNamespace.None + "xmlns", xsd1),

                from p in Data select new XElement(p.Key, p.Value )

                )

                    );

            /*  XmlSchema schema = new XmlSchema();
              schema.Namespaces.Add("xmlns", "http://schema.medstreaming.com/report");

              doc.Add(schema);*/


            var wr = new StringWriter();
            doc.Save(wr);
            Console.Write(wr.GetStringBuilder().ToString());

しかし、それは言うことを保存してクラッシュします

The prefix '' cannot be redefined from '' to 'http://schema.test.com/test' within the same start element tag.
4

2 に答える 2

5

私は以下を使用し、うまくいきました

 XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
            XNamespace xsd = XNamespace.Get("http://www.w3.org/2001/XMLSchema");
            XNamespace ns = XNamespace.Get("http://schema.test.com/test");


            XDocument doc = new XDocument(

                new XDeclaration("1.0", "utf-8", "yes"),

                new XElement(

                    ns + "root",
                    new XAttribute("xmlns", ns.NamespaceName),
                    new XAttribute(XNamespace.Xmlns + "xsd", xsd.NamespaceName),
                    new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
                    from p in Data select new XElement(ns + p.Key, p.Value)

                )

                    );

そしてそれは非常にうまくいった

于 2012-10-22T11:59:22.037 に答える
1

グローバル xml 名前空間を再定義しているため、標準の xmlns 属性の前に、定義した新しいプレフィックスを付ける必要があります。

変化する:

new XAttribute(XNamespace.None + "xmlns", xsd1),

に:

new XAttribute(xsd + "xmlns", xsd1),

そしてそれはソートされるべきです。

于 2012-10-22T10:39:35.433 に答える