我有一个带有指定架构位置的XML文件,例如:
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
Run Code Online (Sandbox Code Playgroud)
我想在C#中验证.Visual Studio,当我打开文件时,根据模式验证它并完美地列出错误.不知何故,我似乎无法在C#中自动验证它,而没有像这样指定要验证的模式:
XmlDocument asset = new XmlDocument();
XmlTextReader schemaReader = new XmlTextReader("relativeSchemaPath");
XmlSchema schema = XmlSchema.Read(schemaReader, SchemaValidationHandler);
asset.Schemas.Add(schema);
asset.Load(filename);
asset.Validate(DocumentValidationHandler);
Run Code Online (Sandbox Code Playgroud)
我不应该能够自动验证XML文件中指定的模式吗?我错过了什么?
我有一组XML文件,其中一些非常大(最多约5000万个元素节点).我正在使用它xmllint来验证这些文件,由于流API,它甚至可以很好地工作.
xmllint --loaddtd --stream --valid /path/to/huge.xml
Run Code Online (Sandbox Code Playgroud)
我最近了解到,xmllint它还能够执行命令行XPath查询,这非常方便.
xmllint --loaddtd --xpath '/root/a/b/c/text()' /path/to/small.xml
Run Code Online (Sandbox Code Playgroud)
但是,这些XPath查询不适用于巨大的XML文件.一段时间后我才收到"被杀"的消息.我尝试启用流式传输API,但这只会导致无输出.
xmllint --loaddtd --stream --xpath '/root/a/b/c/text()' /path/to/huge.xml
Run Code Online (Sandbox Code Playgroud)
有没有办法在使用XPath查询时启用流模式xmllint?是否有其他/更好的方法可以对巨大的XML文件执行命令行XPath查询?
命令
$ xmlstarlet sel -t -c "/collection/record" file.xml
Run Code Online (Sandbox Code Playgroud)
在应用给定的Xpath表达式之前,似乎将整个文件加载到内存中.这不适用于大型XML文件.
是否xmlstarlet提供流式传输模式以从大型(100G +)XML文件中提取子元素?