为什么`XmlDocument.LoadXml()`不能用于命名空间?

时间:2018-06-07 07:54:05

标签: c# asp.net .net xml

我有一个XML标签,写成字符串:

<w:sym w:font="Wingdings" w:char="F0FE"/>

我想从字符串创建XML标记而不使用AddAttribute()等显式方法。所以我使用XmlDocument.LoadXml(),如下所示:

XmlDocument doc = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
doc.LoadXml(@"<w:sym w:font=""Wingdings"" w:char=""F0FE""/>");

LoadXml()抛出异常,说明前缀“w”未定义。

当我使用NameTable定义命名空间时,这让我感到惊讶。

这里有什么问题?

编辑:我已经看到很多解释如何读取片段的答案,但我没有找到解释如何处理命名空间的答案。

1 个答案:

答案 0 :(得分:0)

这不是解释为什么它不能与.NameTable一起使用,而是解决方法如何实现目标。

将标签包装在另一个标签内并在那里定义工作区,如下所示:

String fullTagToRead = 
  @"<document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">" 
+ @"<w:sym w:font=""Wingdings"" w:char=""F0FE""/>" 
+ @"</document>")

像这样,LoadXml()就像一个魅力。甚至不需要编写XML声明标记。