Tôi có tệp xml mà tôi đã đọc trong thời gian chạy, có thể xác thực xml dựa vào tệp xsd khi chạy không? sử dụng C#Có thể xác thực xml dựa trên xsd khi sử dụng mã khi chạy không?
Trả lời
Hãy thử điều này:
public void ValidateXmlDocument(
XmlReader documentToValidate, string schemaPath)
{
XmlSchema schema;
using (var schemaReader = XmlReader.Create(schemaPath))
{
schema = XmlSchema.Read(schemaReader, ValidationEventHandler);
}
var schemas = new XmlSchemaSet();
schemas.Add(schema);
var settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas = schemas;
settings.ValidationFlags =
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += ValidationEventHandler;
using (var validationReader = XmlReader.Create(documentToValidate, settings))
{
while (validationReader.Read())
{
}
}
}
private static void ValidationEventHandler(
object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Error)
{
throw args.Exception;
}
Debug.WriteLine(args.Message);
}
Hope liên kết này giúp:
Các liên kết trông đàng hoàng, nhưng tôi nhận thấy ví dụ được sử dụng XmlValidatingReader, đó là lỗi thời. Hãy xem XmlReader và XmlReaderSettings có chứa một số thuộc tính Validation để xác định hành vi. – STW
tôi GOT MÃ TOO! Tôi sử dụng này trong các thử nghiệm của tôi:
public static bool IsValid(XElement element, params string[] schemas)
{
XmlSchemaSet xsd = new XmlSchemaSet();
XmlReader xr = null;
foreach (string s in schemas)
{ // eh, leak 'em.
xr = XmlReader.Create(
new MemoryStream(Encoding.Default.GetBytes(s)));
xsd.Add(null, xr);
}
XDocument doc = new XDocument(element);
var errored = false;
doc.Validate(xsd, (o, e) => errored = true);
if (errored)
return false;
// If this doesn't fail, there's an issue with the XSD.
XNamespace xn = XNamespace.Get(
element.GetDefaultNamespace().NamespaceName);
XElement fail = new XElement(xn + "omgwtflolj/k");
fail.SetAttributeValue("xmlns", xn.NamespaceName);
doc = new XDocument(fail);
var fired = false;
doc.Validate(xsd, (o, e) => fired = true);
return fired;
}
một này có trong các lược đồ như dây đàn (nguồn tập tin trong hội đồng) và thêm chúng vào một bộ đồ. Tôi xác nhận và nếu nó không hợp lệ tôi trả về false.
Nếu xml không được tìm thấy là không hợp lệ, tôi thực hiện kiểm tra âm để đảm bảo các lược đồ của tôi không bị hỏng. Nó không được bảo đảm, nhưng tôi đã sử dụng nó để tìm lỗi trong các lược đồ của tôi.
Bạn có thể thử sử dụng phương thức 'XmlSchema.Read', vì nó có thể xác nhận hợp lệ lược đồ trong khi phân tích nó. –
cảm ơn mã :) – BigOmar
giải pháp đơn giản ..
try
{
XmlReaderSettings Xsettings = new XmlReaderSettings();
Xsettings.Schemas.Add(null, "personDivideSchema.xsd");
Xsettings.ValidationType = ValidationType.Schema;
XmlDocument document = new XmlDocument();
document.Load("person.xml");
XmlReader reader = XmlReader.Create(new StringReader(document.InnerXml), Xsettings);
while (reader.Read());
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
- 1. Xác thực xml dựa trên xsd với JS/jQuery
- 2. Java xác nhận XML dựa trên XSD Schema
- 3. Xác thực XML dựa vào XSD theo một phương thức
- 4. Lỗi khi xác thực XML đối với XSD
- 5. Xác thực xml được tạo bằng cách sử dụng jaxb dựa vào tệp xsd
- 6. Xác thực Java xsd của xml không có vùng tên
- 7. Làm cách nào để xác thực xml dựa trên xsd và nhận các lỗi * ALL *?
- 8. VB.NET xác thực tệp XML dựa vào tệp XSD và phân tích cú pháp qua xml
- 9. Xác thực Xml bằng lược đồ XSD
- 10. bạn có thể xác thực xsd với xml trong năm 2010 không?
- 11. Xác thực XML đối với XSD
- 12. Tôi có thể sử dụng xác thực dựa trên mã thông báo với thư mục hoạt động không?
- 13. Cách hiệu quả nhất để xác thực XML dựa vào XSD
- 14. Lỗi mã hóa khi sử dụng xác thực ldap Devise
- 15. Xác thực XML dựa vào XSD và bỏ qua thứ tự các phần tử con
- 16. Khi nào nên sử dụng các tệp XSD?
- 17. Xác thực XSD tự động
- 18. Bỏ qua không gian tên đã cung cấp khi xác nhận XML với XSD
- 19. Làm cách nào để sử dụng PowerShell để Xác thực các tệp XML với XSD?
- 20. Xác định xml trong xsd trong đó thuộc tính xác định nội dung có thể là
- 21. Xác thực dựa trên mã thông báo trong WCF
- 22. Có thể chạy Nodej trên Linux dựa trên powerpc không?
- 23. Sử dụng xsd để tạo XML trong .net
- 24. Công cụ xác thực lược đồ XML XSD
- 25. Có thể tạo và thực thi mã Rust khi chạy không?
- 26. Bảo mật xác thực dựa trên mã thông báo
- 27. eclipse: xác nhận xml với xsd
- 28. Xác định khi chạy trên máy ảo
- 29. Xác thực lược đồ XSD trong Ruby
- 30. Không thể sử dụng một EntityTransaction khi sử dụng JTA
đây là trang nhanh nhất, tôi đã sử dụng. –