【发布时间】:2018-11-17 01:07:05
【问题描述】:
我有一个写成字符串的 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 定义命名空间时,这让我感到惊讶。
这里有什么问题?
编辑:我看到很多解释如何读取片段的答案,但我没有找到解释如何处理命名空间的答案。
【问题讨论】:
-
命名空间前缀只有 local 含义。仅仅因为在 C# 代码的“外部”上下文中,您已经确定了一个命名空间并为其使用了
w前缀,这与分配的任何w前缀没有关系在文档中您正在尝试加载。 -
@Damien_The_Unbeliever,谢谢你的解释。可以假设
XmlDocument的.NameTable是在任何情况下在解析XML 时查找名称空间的可靠参考。正如您所解释的那样,事实证明这是错误的。