如何将默认命名空间添加到加载的 XmlDocument 以便验证“有效”
我们有一些使用特定命名空间的 xml 数据,但实际上并未为其声明命名空间。我们想要验证它,但是默认命名空间中的无效元素不会被捕获,因为 xmlns
没有设置,所以按照 xml 规则,一切都会发生。在处理的这个阶段,文档可能已经加载了很长时间,而且不一定是原始形式(因此命名空间管理器可能是不可能的)。
<root>
<valid />
<notvalid />
</root>
var xd = new XmlDocument();
xd.Load(xmlstring);
xd.Validate((sender, args) =>
{
...
});
We have some xml data that uses a certain namespace, but does not actually declare a namespace for it. We want to validate it, but invalid elements in default namespace don't get caught because xmlns
is not set so by xml rules anything goes. At this stage of processing document has possibly been loaded for a long time, and is not necessarily in original form anyways (so namespace manager is probably out of the question).
<root>
<valid />
<notvalid />
</root>
var xd = new XmlDocument();
xd.Load(xmlstring);
xd.Validate((sender, args) =>
{
...
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您无法即时修改 XmlDocument,因为 XmlNode 已使用特定命名空间创建。您必须修改文档并通过 XmlNodeReader 重新解析/重新读取。
您可以在 XmlDocument 上设置属性,但对于命名空间,它们实际上只会在重新加载文档(从修改后的副本)后强制执行任何操作。
使用 XmlNodeReader、LAAEFTR 可能会“更好”地完成此操作。
You can't modify XmlDocument on the fly, because XmlNodes are already created with a certain namespace. You have to modify the document and reparse it/reread via XmlNodeReader.
You can set attributes on XmlDocument, but for namespace they'll actually enforce anything only after reload of document (from modified copy).
This probably would be "better" done with XmlNodeReader, LAAEFTR.