我有一个带有以下签名的 Web 方法(在 SOAP Web 服务中):
public msgResponse myWebMethod([XmlAnyElement] XmlElement msgRequest)
我选择在reading 之后使用XmlElement
参数它将允许我对参数执行我自己的 XSD 验证。问题是参数可能非常大(最多 80Mb 的 XML),因此按照链接中的建议调用 XmlElement.OuterXML()
并不是一个非常实用的方法.
还有其他方法可以根据 XSD 验证 XmlElement 对象吗?
更一般地说,这种实现需要大量 XML 的 Web 服务的方法是否合适?我遇到了一些关于使用 SoapExtensions 直接访问输入流的提示,但我不确定这是否适合我的情况。
注意:不幸的是,我被束缚在现有的 WSDL 和 XSD 上,我无权更改,这就是我首先使用非 WCF 实现的原因。
最佳答案
这是一个简单的例子。只需将您的 XmlElement
传递给此方法:
private static void TheAnswer(IXPathNavigable inputElement)
{
var schemas = new XmlSchemaSet();
schemas.Add("http://foo.org/importvalidator.xsd",
@"..\..\validator.xsd");
var settings = new XmlReaderSettings
{
Schemas = schemas,
ValidationFlags =
XmlSchemaValidationFlags.
ProcessIdentityConstraints |
XmlSchemaValidationFlags.
ReportValidationWarnings,
ValidationType = ValidationType.Schema
};
settings.ValidationEventHandler +=
(sender, e) =>
Console.WriteLine("{0}: {1}", e.Severity, e.Message);
using (
XmlReader documentReader =
inputElement.CreateNavigator().ReadSubtree())
{
using (
XmlReader validatingReader = XmlReader.Create(
documentReader, settings))
{
while (validatingReader.Read())
{
}
}
}
}
关于c# - 在没有 OuterXML 的情况下验证(和查询)XmlElement 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868369/