2009-12-29 81 views
4

我想要做到這一點:我有一個XML文件,我想根據XSD文件進行驗證。 到目前爲止,上帝......我所要做的就是呈現所有節點的驗證錯誤。介紹XML驗證錯誤

例如,我有這個XML文件:

<people> 
    <name>Jonh</name> 
    <tel>91991919199191919</tel> 
</people> 

當我確認這個文件,這將讓你在電話節點錯誤。 我想將該名稱呈現給我的應用程序的最終用戶,以及XML中的錯誤。

我triyng在C#.NET中做到這一點。

感謝您的幫助...

+0

你可以發佈xsd文件嗎? – Numenor 2009-12-29 14:31:49

+0

有趣的問題。你有沒有找到高級別的解決方案?在沒有用線和位置解釋錯誤位置的意義上。謝謝 – robob 2012-06-20 13:43:19

回答

2

您是否能夠使用.NET 3.5?如果是這樣,您可以在XDocument上使用Validate擴展方法,並提供ValidationEventHandler。當驗證失敗時,您的處理程序將被調用ValidationEventArgs,您可以使用它來查找錯誤的位置。

+0

是的。我能夠使用.NET 3.5。你能舉個例子嗎? – 2009-12-29 14:15:37

+0

@arpf:目前還沒有,不 - 但它應該是不言而喻的。試一試,如果你有問題,用你試過的代碼編輯你的問題。 – 2009-12-29 14:49:40

+0

如何使用行號讀取XML文檔? – 2009-12-29 15:01:06

1

驗證錯誤通常以XmlSchemaException的形式出現 - 您可以捕獲這些錯誤並使用Message屬性將這些錯誤報告給用戶。

0

看看Schematron。它非常適合這種驗證。 雖然您可以使用Schema進行驗證,但Schematron只是使用XSL並生成一個XML文檔,其中包含驗證消息,可以使用戶更加友好。

3

此代碼根據XSD文件驗證XML文件並返回錯誤和行號。

public static void ValidateXML(Stream stream) 
{ 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.Schemas.Add("", "yourXSDPath"); 
    settings.ValidationType = ValidationType.Schema; 
    XmlReader reader = XmlReader.Create(stream, settings); 
    XmlDocument document = new XmlDocument(); 
    document.Load(reader); 
    ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler); 
    document.Validate(eventHandler); 
    reader.Close(); 
} 

static void ValidationEventHandler(object sender, ValidationEventArgs e) 
{} 

try 
{ 
    ValidateXML(yourXMLStream); 
} 

catch (XmlSchemaValidationException ex) 
{ 
    Console.WriteLine(String.Format("Line {0}, position {1}: {2}", ex.Message, ex.LineNumber, ex.LinePosition)); 
} 
+0

thanx,這真的幫了我很多,雖然我使用了[使用](http://msdn.microsoft.com/en-us/library/yh598w02.aspx)作爲XmlReader的創建者。 – Natrium 2011-12-22 10:12:55

+0

那麼DTD呢?我不認爲我可以使用document.Validate來驗證具有DTD驗證設置的事件處理程序嗎? – 2017-04-24 22:36:30