如何使用XMLWriter在C#中的新StartElement中更改XMLN?

如何使用XMLWriter在C#中的新StartElement中更改XMLN?,c#,xml,C#,Xml,我需要以下结果: <?xml version="1.0" encoding="utf-8"?> <LIEFERUNG-AUSWI xmlns:aw="http://www.bundesbank.de/xmw/auswi/2003-01-01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bbk="http://www.bundesbank.de/xmw/2003-01-01" xsi:schemaLoc

我需要以下结果:

<?xml version="1.0" encoding="utf-8"?>
<LIEFERUNG-AUSWI xmlns:aw="http://www.bundesbank.de/xmw/auswi/2003-01-01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bbk="http://www.bundesbank.de/xmw/2003-01-01" xsi:schemaLocation="http://www.bundesbank.de/xmw/auswi/2003-01-01 BbkXmwAuswi.xsd" version="1.0" erstellzeit="2013-11-06T15:36:44" stufe="Test" xmlns="http://www.bundesbank.de/xmw/auswi/2003-01-01">
  <ABSENDER xmlns="http://www.bundesbank.de/xmw/2003-01-01">
    <aw:FIRMENNR>00004711</aw:FIRMENNR>
...
但这给了我以下信息:

writer.WriteStartElement("LIEFERUNG-AUSWI", "http://www.bundesbank.de/xmw/auswi/2003-01-01");
writer.WriteAttributeString("xmlns", "aw", null, "http://www.bundesbank.de/xmw/auswi/2003-01-01");
writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
writer.WriteAttributeString("xmlns", "bbk", null, "http://www.bundesbank.de/xmw/2003-01-01");
writer.WriteAttributeString("xsi", "schemaLocation", null, "http://www.bundesbank.de/xmw/auswi/2003-01-01 BbkXmwAuswi.xsd");
writer.WriteAttributeString(null, "version", null, "1.0");
writer.WriteAttributeString(null, "erstellzeit", null, Dat_DatZeit);
writer.WriteAttributeString(null, "stufe", null, "Test");

// Start-Tag von Absender
writer.WriteStartElement("ABSENDER");
writer.WriteAttributeString("xmlns", "bbk", null, "http://www.bundesbank.de/xmw/2003-01-01");
writer.WriteElementString("aw", "FIRMENNR", null, "00004711");
<?xml version="1.0" encoding="utf-8"?>
<LIEFERUNG-AUSWI xmlns:aw="http://www.bundesbank.de/xmw/auswi/2003-01-01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bbk="http://www.bundesbank.de/xmw/2003-01-01" xsi:schemaLocation="http://www.bundesbank.de/xmw/auswi/2003-01-01 BbkXmwAuswi.xsd" version="1.0" erstellzeit="2013-11-06T15:36:44" stufe="Test" xmlns="http://www.bundesbank.de/xmw/auswi/2003-01-01">
  <ABSENDER xmlns:bbk="http://www.bundesbank.de/xmw/2003-01-01">
    <aw:FIRMENNR>00004711</aw:FIRMENNR>

这给了我一个错误的结果…

您必须更改以下行:

writer.WriteStartElement("ABSENDER");
致:

下一个是不必要的

我可以补充一点,您的XML似乎有点过于复杂,名称空间经常被重新定义。例如,在根标记中,http://www.bundesbank.de/xmw/auswi/2003-01-01 是默认的命名空间,但它也被称为AW,而您称为BBK的命名空间后来被使用,没有它的名字…也许您应该考虑在这个过程中简化XML。
除此之外,在发布之前不测试代码通常会让你的问题就此结束。我推荐这个。这是我用来找到你答案的

由于您已经将讨论中的URL定义为名称空间
bbk
,因此我不确定XmlWriter是否能够在以后将其作为默认名称空间处理(基本上是一个具有两个名称的名称空间)。不过我可能错了。@madd0那么你有什么建议?正如我所说,我实际上只是在猜测如何编写它,这样我的整个代码就可能是错误的。。。我甚至不知道我的代码的第一部分是否正确……为什么要使用
XmlWriter
?LINQ转换为XML要容易得多。@johnsaunds当然知道,但我对XML或LINQ一无所知,现在它似乎可以工作了,所以我就这样离开它。。当然,但你让它更难维护
XmlWriter
是万不得已的办法。它奏效了,但。。。是的,我知道这看起来有点过于复杂,但它必须看起来像这样,别问我为什么。。。我们得到了模板,所以我不能更改它…顺便说一句,我测试了我的代码,实际上我尝试了类似的东西,但不是
”,而是尝试了前缀为“null”,但这不起作用。。。
writer.WriteStartElement("ABSENDER");
writer.WriteStartElement("", "ABSENDER","http://www.bundesbank.de/xmw/2003-01-01");