在asp.net中创建XMLDocument throguh代码

时间:2013-10-15 17:38:59

标签: c# asp.net xml xmldocument

我正在尝试通过代码生成这样的XML文档。

<TestRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://localhost:2292/RMSchema.xsd">
    <Version>3</Version>
    <ApplicationHeader>
        <AppLanguage />
        <UserId>rmservice</UserId>
    </ApplicationHeader>
    <CustomerData>
        <ExistingCustomerData>
            <MTN>2084127182</MTN>
        </ExistingCustomerData>
    </CustomerData>
</TestRequest>

我尝试了一些样品。但他们为孩子们创造了xmlns,我不需要。任何帮助都非常感谢。

我尝试过以下代码。但它只向所有孩子添加xmlns,我不需要

XmlDocument xDocument = new XmlDocument();
xDocument.AppendChild(xDocument.CreateXmlDeclaration("1.0", "windows-1252", null));
XmlElement xRoot = xDocument.CreateElement("TestRequest", "XNamespace.Xmlns=http://www.w3.org/2001/XMLSchema-instance" + " xsi:noNamespaceSchemaLocation=" + "http://localhost:2292/RMSchema.xsd");
xDocument.AppendChild(xRoot);
xRoot.AppendChild(xDocument.CreateElement("Version")).InnerText = 1;

由于 图图

我试过

var xsi = "http://www.w3.org/2001/XMLSchema-instance";
            XmlElement xRoot = xDocument.CreateElement("xsi","RMRequest",xsi);
            xRoot.SetAttribute("noNamespaceSchemaLocation", xsi, "http://localhost:2292/RMSchema.xsd");

            xDocument.AppendChild(xRoot);
Now the response is 

<?xml version=\"1.0\" encoding=\"windows-1252\"?><xsi:TestRequest xsi:noNamespaceSchemaLocation=\"http://localhost:2292/RMSchema.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">

2 个答案:

答案 0 :(得分:3)

这是令人敬畏的LINQ to XML。享受!

XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XDocument doc = new XDocument(new XDeclaration("1.0", "windows-1252", null),  
    new XElement("TestRequest",
        new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
        new XAttribute(xsi + "noNamespaceSchemaLocation", "http://localhost:2292/RMSchema.xsd"),
        new XElement("Version",
                new XText("3")
        ),
        new XElement("ApplicationHeader",
                new XElement("AppLanguage"),
                new XElement("UserId",
                        new XText("rmservice")
                )
        ),
        new XElement("CustomerData",
            new XElement("ExistingCustomerData",
                new XElement("MTN", 
                    new XText("2084127182")
                )
            )
        )
    )
);

doc.Save(filePath);

如果你真的想要旧API,请点击这里:

var xDocument = new XmlDocument();
xDocument.AppendChild(xDocument.CreateXmlDeclaration("1.0", "windows-1252", null));

var xsi = "http://www.w3.org/2001/XMLSchema-instance";
var xRoot = xDocument.CreateElement("TestRequest");

var attr = xDocument.CreateAttribute("xsi", "noNamespaceSchemaLocation", xsi);
attr.Value = "http://localhost:2292/RMSchema.xsd";
xRoot.Attributes.Append(attr);

xRoot.AppendChild(xDocument.CreateElement("Version")).InnerText = "1";

// ..  your other elemets ...

xDocument.AppendChild(xRoot);
xDocument.Save(filePath);

编辑:根据您的评论,您似乎想要特定订单中的xmlns:xsi和其他属性。如果是这样,您可能必须先欺骗XmlDocument以添加xmlns:xsi属性。

var xDocument = new XmlDocument();
xDocument.AppendChild(xDocument.CreateXmlDeclaration("1.0", "windows-1252", null));

var xsi = "http://www.w3.org/2001/XMLSchema-instance";
var xRoot = xDocument.CreateElement("TestRequest");

// add namespace decl are attribute
var attr = xDocument.CreateAttribute("xmlns:xsi");
attr.Value = xsi;
xRoot.Attributes.Append(attr);

// no need to specify prefix, XmlDocument will figure it now
attr = xDocument.CreateAttribute("noNamespaceSchemaLocation", xsi);
attr.Value = "http://localhost:2292/RMSchema.xsd";
xRoot.Attributes.Append(attr);

xRoot.AppendChild(xDocument.CreateElement("Version")).InnerText = "1";

// ..  your other elemets ...

xDocument.AppendChild(xRoot);
xDocument.Save(filePath);

答案 1 :(得分:0)

你在寻找这样的东西: -

XmlDocument xmldoc = new XmlDocument();
XmlNode root = xmldoc.AppendChild(xmldoc.CreateElement("Root"));
XmlNode child = root.AppendChild(xmldoc.CreateElement("Child"));
XmlAttribute childAtt =child.Attributes.Append(xmldoc.CreateAttribute("Attribute"));
childAtt.InnerText = "My innertext";
child.InnerText = "My node Innertext";
xmldoc.Save("ABC.xml");