我有一个写为字符串的 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 定义了命名空间。

这里有什么问题?

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

最佳答案

这里不是解释为什么它不适用于 .NameTable ,而是如何实现目标的解决方法。

将您的标签包裹在另一个标签中并在那里定义工作区,如下所示:

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

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

关于c# - 为什么 `XmlDocument.LoadXml()` 不适用于命名空间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50735768/

10-09 14:56