【发布时间】:2017-06-27 17:13:27
【问题描述】:
我正在构建一个 xml 文档,并且我已经在最顶部声明了命名空间。
<Root xmlns="http://www.omg.org/space/xtce" xmlns:xtce="http://www.omg.org/space/xtce" ...>
在下面的某个任意级别,我想 AppendChild 使用从字符串创建的元素。我的目标是最终得到一个包含该元素而完全没有 xmlns 的文档。
这是我得到的最接近的-
string someElementStr = "<SomeElement name="foo"><SubElement name="bar" /></SomeElement>";
XmlDocumentFragment node = doc.CreateDocumentFragment();
node.InnerXml = someElementStr;
someXmlNodeWithinDoc.AppendChild(node);
这段代码导致-
<SomeElement name="foo" xmlns="">
<SubElement name="bar" />
</SomeElement>
在最终文档中。
当我不必从字符串转到 XML 时,我使用不同的构造-
XmlElement elem = doc.CreateElement("SomeElement", "http://www.omg.org/space/xtce");
elem.SetAttribute("name","foo");
someXmlNodeWithinDoc.AppendChild(elem);
这正是我想要的。
<SomeElement name="foo">
</SomeElement>
我想在我当前的解决方案中做一些事情
node.setNamespace("http://www.omg.org/space/xtce") 则文档将省略 xmlns,因为它与 root 相同。
谁能告诉我用单一命名空间构建文档的惯用方式,其中一些元素作为字符串存储在模型中?
这个issue 几乎与我的相同,只是该解决方案仅提供子元素作为字符串(“新”下的所有内容)。我需要整个元素。
【问题讨论】:
-
您可以将 XML 字符串加载到 XmlDocument,然后获取子节点并将其添加到现有 XML 文档中。
-
我尝试从使用 LoadXml 创建的文档中添加我的元素,但它不喜欢跨文档 AppendChild。如果您建议我将整个文档作为一个不正确的字符串,我只有一些元素。
标签: c# xml c#-4.0 xml-namespaces