0

ベストプラクティスのようには見えないことはわかっていますが、同じ名前空間で xml を生成する必要があります

例えば:

<ns1:root xsi:schemaLocation=""http://schemalocation""
xmlns:ns1=""http://schema""
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns=""http://schema"">
...
</ns1:root>

また、シリアライザーに名前空間を追加しました。

var xmlSerializerNamespaces = new XmlSerializerNamespaces();
xmlSerializerNamespaces.Add("ns1", "http://schema");
xmlSerializerNamespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlSerializerNamespaces.Add(string.Empty, "http://schema");

そして、これはクラスそのものです:

[XmlRoot(ElementName = "request", Namespace = "http://schema")]
    [Serializable]
    public class Request 
    {
        [XmlAttributeAttribute("schemaLocation", Namespace = XmlSchema.InstanceNamespace)]
        public string SchemaLocation
        {
            get { return _schemaLocation; }
            set { _schemaLocation = value; }
        }

        ...

        private string _schemaLocation = "http://schemalocation";   }

したがって、すべてが優れていますが、デフォルトの xmlns は生成された xml にありません。私も XmlWriterSettings で遊んだことがありますが、結果はありません。文字列を置換せずにそれを行う方法を誰か考えていますか?)

4

1 に答える 1

0

デフォルトの名前空間は、XMLフラグメントを追加するために使用する名前空間に基づいて設定されます。

XNamespace defaultNs = @"http://schema";
var result = new XDocument(new XElement(defaultNs + "root"));

次の出力が生成されます。

<rootNode xmlns="http://schema">
</rootNode>

したがって、あなたがしなければならないのは、他の名前の付いたものをドキュメントに追加することです。

XNamespace defaultNs = @"http://schema";
var root = new XElement(defaultNs + "root",
    new XAttribute("xsi", "schemaLocation", "http://schemaLocation"),
    new XAttribute(XNamespace.Xmlns + "ns1", defaultNs"),
    new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance")
);
于 2012-10-15T12:58:03.490 に答える