Boa*_*oaz 15 .net c# xml xmlwriter
我在工作中使用.NET XML技术.我非常喜欢的一件事是XSLT引擎,更确切地说是它的可扩展性.然而,有一件小东西一直是烦恼的源头.没有任何重大或我们无法忍受的东西,但它阻止我们生成我们想要生成的漂亮的XML.
我们做的一件事是将节点内联转换并将节点从一个XML文档导入另一个XML文档.
遗憾的是,当您将节点保存到XmlTextWriter(实际上无论何种XmlWriter.Create(Stream) 返回)时,命名空间定义都会被抛出,无论是否有必要(先前已定义).你会得到以下xml:
<root xmlns:abx="http://bladibla">
<abx:child id="A">
<grandchild id="B">
<abx:grandgrandchild xmlns:abx="http://bladibla" />
</grandchild>
</abx:child>
</root>
Run Code Online (Sandbox Code Playgroud)
有没有人建议如何说服.NET对其命名空间定义有效?
PS.作为一个额外的好处,我想覆盖默认命名空间,在编写节点时更改它.
Kir*_*huk 14
使用此代码:
using (var writer = XmlWriter.Create("file.xml"))
{
const string Ns = "http://bladibla";
const string Prefix = "abx";
writer.WriteStartDocument();
writer.WriteStartElement("root");
// set root namespace
writer.WriteAttributeString("xmlns", Prefix, null, Ns);
writer.WriteStartElement(Prefix, "child", Ns);
writer.WriteAttributeString("id", "A");
writer.WriteStartElement("grandchild");
writer.WriteAttributeString("id", "B");
writer.WriteElementString(Prefix, "grandgrandchild", Ns, null);
// grandchild
writer.WriteEndElement();
// child
writer.WriteEndElement();
// root
writer.WriteEndElement();
writer.WriteEndDocument();
}
Run Code Online (Sandbox Code Playgroud)
此代码生成了所需的输出:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:abx="http://bladibla">
<abx:child id="A">
<grandchild id="B">
<abx:grandgrandchild />
</grandchild>
</abx:child>
</root>
Run Code Online (Sandbox Code Playgroud)
我不确定这就是您正在寻找的内容,但是当您开始写入 Xml 流时,您可以使用此类代码:
myWriter.WriteAttributeString("xmlns", "abx", null, "http://bladibla");
Run Code Online (Sandbox Code Playgroud)
XmlWriter 应该记住它并且不再重写它。它可能不是 100% 防弹,但在大多数情况下都有效。
| 归档时间: |
|
| 查看次数: |
6946 次 |
| 最近记录: |