我有这样的XML:

<stream:stream to="lap-020.abcd.co.in" from="[email protected]" xml:lang="en" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0"/>


尝试使用XDocument这样生成XML

private readonly XNamespace _streamNamespace = "http://etherx.jabber.org/streams";
private readonly XName _stream;

_stream = _streamNamespace + "stream";

XDocument xdoc=new XDocument(
    new XElement(_stream,
        new XAttribute("from", "[email protected]"),
        new XAttribute("to","lap-020.abcd.co.in"),
        new XAttribute("xmlns:stream","http://etherx.jabber.org/streams"),
        new XAttribute("version","1.0"),
        new XAttribute("xml:lang","en")
      ));


但我有一个例外:


  附加信息:名称中不能包含':'字符,十六进制值0x3A。

最佳答案

要添加名称空间声明,可以使用XNamespace.Xmlns,并使用xml引用预定义的名称空间前缀XNamespace.Xml,例如:

XNamespace stream = "http://etherx.jabber.org/streams";
var result = new XElement(stream + "stream",
                    new XAttribute("from", "[email protected]"),
                    new XAttribute("to","lap-020.abcd.co.in"),
                    new XAttribute(XNamespace.Xmlns + "stream", stream),
                    new XAttribute("version","1.0"),
                    new XAttribute(XNamespace.Xml+"lang","en"),
                    String.Empty);
Console.WriteLine(result);
//above prints :
//<stream:stream from="[email protected]" to="lap-020.abcd.co.in"
//               xmlns:stream="http://etherx.jabber.org/streams" version="1.0"
//               xml:lang="en">
//</stream:stream>

07-24 09:49
查看更多