我无法按照以下方式生成XML:
<Root xmlns:brk="http://somewhere">
<child1>
<brk:node1>123456</brk:node1>
<brk:node2>500000000</brk:node2>
</child1>
</Root>
这段代码让我大部分时间都可以使用,但是我无法在节点前面获得'brk'命名空间;
var rootNode = new XElement("Root");
rootNode.Add(new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere"));
var childNode = new XElement("child1");
childNode.Add(new XElement("node1",123456));
rootNode.Add(childNode);
我试过这个:
XNamespace brk = "http://somewhere";
childNode.Add(new XElement(brk+"node1",123456));
和这个
XNamespace brk = "http://somewhere";
childNode.Add(new XElement("brk:node1",123456));
但两者都会导致异常。
答案 0 :(得分:3)
你几乎就在那里,但是你在第一个代码示例中犯了一个简单的错误。我相信这就是你所需要的:
XNamespace brk = "http://somewhere.com";
XElement root = new XElement("Root",
new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere.com"));
XElement childNode = new XElement("child1");
childNode.Add(new XElement(brk + "node1",123456));
root.Add(childNode);
这里的主要区别在于我将node1
添加到childNode
,如下所示:
childNode.Add(new XElement(brk + "node1",123456));
给定XmlWriter
和XDocument
的代码给出了输出结果:
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns:brk="http://somewhere.com">
<child1>
<brk:node1>123456</brk:node1>
</child1>
</Root>
有关使用MSDN的详细信息,请参阅XNamespace
。
答案 1 :(得分:0)
我认为问题在于根元素也需要具有命名空间:
XElement root = new XElement("Root",
new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere.com"));
需要:
XElement root = new XElement(brk + "Root",
new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere.com"));
答案 2 :(得分:0)
这是解决方案并且运行正常。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using System.Xml.Serialization;
namespace CreateSampleXML
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
XNamespace xm = "http://somewhere.com";
XElement rt= new XElement("Root", new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere.com"));
XElement cNode = new XElement("child1");
cNode.Add(new XElement(xm + "node1", 123456));
cNode.Add(new XElement(xm + "node2", 500000000));
rt.Add(cNode);
XDocument doc2 = new XDocument(rt);
doc2.Save(@"C:\sample3.xml");
}
}
}