[英]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,但是这个属性是只读的...其他人建议在文本文件级别更改它(这是修补,而且会很慢)
任何人都可以给我一个提示吗?
table:
部分不是名称空间。 它们是“名称空间前缀”。 它们是实际命名空间的别名。 他们必须在某个地方宣布。 如果它们的源XML中根本没有声明它们,那么它就不是有效的XML,您不应期望能够处理它。
你确定你加载的是整个XML文档吗? 他们没有放弃零件以使其更简单? 那些部分可能是包含table:
定义的部分table:
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.