繁体   English   中英

带有命名空间但没有xmlns的Xml

[英]Xml with Namespace but without xmlns

我正在使用C#编写一个在xml级别编辑打开文档文件的程序。 例如,它向表添加行。

所以我将content.xml加载到XmlDocument“doc”中并遍历xml结构。 假设我在XmlNode“行”中有<table:table-row>节点,现在我想向它添加一个<table:table-cell>节点。 所以我打电话

XmlDocument doc = new XmlDocument();
doc.Load(filename);
...
XmlNode row = ...;
...
XmlNode cell = doc.CreateElement("table:table-cell");
row.Append(cell);
...
doc.Save(filename);

问题是,在文件中,新节点只包含<table-cell> ... </ table-cell>

C#只是决定忽略我告诉它的内容并且甚至没有告诉我做其他事情(起初我忽略了问题,并且想知道为什么它不起作用虽然生成的xml看起来没问题)。

从我到目前为止收集到的,问题与“table:”是命名空间这一事实有关。 当我还向CreateElement提供NamespaceURI时,我得到<table:table-cell table:xmlns =“THE_URI”> ... - 但原始文档没有这个xmlns,所以我不想要它...

我试图使用XmlTextWriter并设置writer.Settings.Namespaces = false,因为我认为,这应该会抑制xmlns的输出,但它只会导致异常 - 文档有一些名称空间,如果Namespaces设置为false ...(如果存在xmlns,则wtf !?抑制xmlns的输出似乎比抛出异常的数十亿倍......)

在一些类似的讨论中,我读到你应该手动设置cell.Name,但是这个属性是只读的...其他人建议在文本文件级别更改它(这是修补,而且会很慢)

任何人都可以给我一个提示吗?

每个命名空间应至少有一个带有URI的xmlns定义。 这是两个标签之间的最终区别。

但是,您可以在文件中(在开头)仅声明一次xmlns属性。

请参阅使用C#中的命名空间创建特定的XML文档

table:部分不是名称空间。 它们是“名称空间前缀”。 它们是实际命名空间的别名。 他们必须在某个地方宣布。 如果它们的源XML中根本没有声明它们,那么它就不是有效的XML,您不应期望能够处理它。

你确定你加载的是整个XML文档吗? 他们没有放弃零件以使其更简单? 那些部分可能是包含table:定义的部分table:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM