2013-02-12 104 views
-1

在C#:檢查XML的線是有效的(不是一個完整的文檔)

我有一組文本行(應該是XML)發送到一個功能被添加到一個XML文件。每一行是一個簡單的塊這樣的3個例子:

<AAA f="1" g="3"> </AAA> 
<AAA f="2" g="2"> </AAA> 
<AAA f="3" g="3"> </AA  <-- Oops a bad one! 

我需要檢查每行,看它是否是有效的XML之前,我接受它變成一個完整的XML文檔中的某些行是壞的,但我們希望所有好的。

ROW1: good 
ROW2: good 
ROW3: bad 
ROW4: good 

在這種情況下,我們只需要ROW1,2和4。

那麼,如何檢查行字符串是否爲有效的XML時,它不是一個完整的文檔?

+2

文檔中包裹它的讀者? – pm100 2013-02-12 18:01:50

+0

如何讀取XDocument或XmlDocument中的整個xml,並顯示您將得到的異常的行號?您也可以將其應用於單行,但速度會很慢 – 2013-02-12 18:01:54

+0

您提供的所有「有效」示例都將作爲完整文檔有效,因此您可以將它們解析爲完整的文檔。你能否舉一個不適用的例子? – 2013-02-12 18:02:06

回答

4

我想嘗試這樣的事:

public static bool IsValid(this string XML) 
{ 
    try 
    { 
     XElement temp = XElement.Parse(XML); 
    } 
    catch (FormatException) 
    { 
     return false; 
    } 
    catch (XmlException) 
    { 
     return false; 
    } 
    return true; 
} 
-3

我會做這樣的。

private static bool IsValidXml(string xmlToCheck) 
     { 
      var doc = new XmlDocument(); 
      try 
      { 
       doc.LoadXml(xmlToCheck); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       //catch ex. 
       return false; 
      } 
     } 
+0

問題中提到的那些行不是XmlDocuments,因此這不是正確的方法。 – CSharper 2013-02-12 18:30:10

+2

另外,-1用於捕獲'Exception'而不是特定的例外。 – 2013-02-12 18:40:58

0

您可以用XmlTextReader的驗證XML文檔片段(這是你的線條是什麼),但你必須創建一個專門的閱讀器設置


XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None); 
XmlReaderSettings settings = new XmlReaderSettings() { 
    ConformanceLevel = ConformanceLevel.Fragment 
}; 
XmlReader reader = XmlReader.Create(new StringReader(xmlFrag), settings, context); 

XmlReaderSettings ConformanceLevel

+0

-1用於暗示不推薦使用的'XmlTextWriter'構造函數。 – 2013-02-12 18:40:22

+0

@John Saunders不,構造函數不是棄用的,no ObsoleteAttribute。該文檔只是說,推薦的方法是使用靜態的XmlReader.Create方法與適當的XmlReaderSettings ...但同意:該工廠方法有更多的權力。 – CSharper 2013-02-12 19:33:58

相關問題