-1

我正在尝试生成如下所示的 XML 文档。我尝试了几种解决方案,但是当我添加命名空间时,我几乎到处都有命名空间,比如

<FieldB xlmns="">BBBBB</FieldB>

你知道如何得到这个吗?

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<value attributeA="A" attributeB="B" xmlns:XXX="http://MyURLA" xmlns="http://MyURLB">
    <FieldA>AAAAA</FieldA>
    <FieldB>BBBBB</FieldB>
    <FieldB>BBBBB</FieldB>
    <status attributeC="C">
        <FieldC>ValueFieldC</FieldC>
    </status>
    <LastUpdate date="2011-02-11T10:00:56.350" login="testing"/>
    <XXX:Infos>
        <XXX:Info>
            <XXX:InfoA>false</XXX:InfoA>
            <XXX:InfoB>false</XXX:InfoB>
        </XXX:Info>
    </XXX:Infos>
</value>
4

2 回答 2

2

您可以使用 XNamespace:

public class Program
{
    static void Main()
    {
        XNamespace nsA = "http://MyURLA";
        XNamespace nsB = "http://MyURLB";
        var doc = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XElement(
                nsB + "value",
                new XAttribute(XNamespace.Xmlns + "XXXX", nsA),
                new XAttribute("attributeA", "A"),
                new XAttribute("attributeB", "B"),
                new XElement("FieldA", "AAAA"),
                new XElement("FieldA", "BBBB"),
                new XElement("FieldC", "CCCC"),
                new XElement(
                    "status", 
                    new XAttribute("attributeC", "C"),
                    new XElement("FieldC", "ValueFieldC")
                ),
                new XElement(
                    "LastUpdate", 
                    new XAttribute("date", DateTime.Now), 
                    new XAttribute("login", "testing")
                ),
                new XElement(
                    nsA + "Infos",
                    new XElement(nsA + "InfoA", false),
                    new XElement(nsA + "InfoB", false)
                )
            )
        );
        Console.WriteLine(doc.ToString());
    }
}
于 2012-09-25T11:48:56.307 回答
1

我怀疑问题是您没有将FieldA, FieldBetc 放在正确的名称空间中-您不希望在 XML 中有明确的名称空间声明,但是您显示的 XML 实际上会将它们放在带有 URL 的名称空间中http://MyURLB,由于默认值的继承方式。

我怀疑你是否只使用:

XNamespace nsB = "http://MyURLB";

var doc = ... {
    new XElement(nsB + "value", 
        ...
        new XElement(nsB + "FieldA", "AAAA");
        new XElement(nsB + "FieldB", "BBBB");
        new XElement(nsB + "FieldC", "CCCC");
        ...
    )
};

然后就好了。( FieldAetc) 元素不会有明确的命名空间引用,因为它们与其父元素位于相同的命名空间中。

于 2012-09-25T12:51:16.467 回答