Pas*_*nen 2 c# xml validation xmldocument xml-namespaces
我们有一些使用某个命名空间的xml数据,但实际上并没有为它声明命名空间.我们想要对它进行验证,但是默认命名空间中的无效元素不会被捕获,因为xmlns
xml规则没有设置任何内容.在这个处理阶段,文档可能已经加载了很长时间,并且不一定是原始形式(因此命名空间管理器可能是不可能的).
<root>
<valid />
<notvalid />
</root>
Run Code Online (Sandbox Code Playgroud)
var xd = new XmlDocument();
xd.Load(xmlstring);
xd.Validate((sender, args) =>
{
...
});
Run Code Online (Sandbox Code Playgroud)
您无法动态修改XmlDocument,因为已经使用某个命名空间创建了XmlNodes.您必须修改文档并通过XmlNodeReader重新解析/重读.您可以在XmlDocument上设置属性,但对于命名空间,只有在重新加载文档(来自修改后的副本)后,它们才会实际执行任何操作.
var target = "urn:foobar";
var xd = new XmlDocument();
xd.Load(xmlstring);
// set default namespace to a schema identifier,
// this is not enforced in this 'xd' document yet.
xd.DocumentElement.SetAttribute("xmlns", target);
var newXd = new XmlDocument();
// reload document into new instance
newXd.Load(xd.OuterXml);
// attach the schema URI to schema identifier
newXd.Schemas.Add(target, "file:///c|/temp/foobar.xsd");
newXd.Validate((sender, args) => {
... // now elements in default namespace are validated against "foobar.xsd"
});
Run Code Online (Sandbox Code Playgroud)
使用XmlNodeReader,LAAEFTR这可能会"更好".