2013-07-03 113 views
2

我有一個String包含一個XML文件的文本。字符串是由輸入流形成的,但我認爲這不相關。閱讀XML的第一行

字符串看起來沒問題,因爲:

System.Diagnostics.Debug.WriteLine("iString = " + iString); 

輸出:

iString = <?xml version="1.0"?> 
<DiagReport> 
<LicensingData> 
    <ToolVersion>6.3.94</ToolVersion> 
    <LicensingStatus>SL_LICENSING_STATUS_NOTIFICATION</LicensingStatus> 
</LicensingData> 
</DiagReport> 

我然後轉換StringStringReader

StringReader strReader = new StringReader(iString); 

而且StringReaderXmlTextReader

XmlTextReader reader = new XmlTextReader(strReader); 

在開始我的代碼之前,我想檢查XML的第一個節點是<DiagReport>。有沒有一種方法可以使用XmlTextReader的成員函數?

+1

僅供參考,你不應該使用'新的XmlTextReader()'或'新的XmlTextWriter()'。自.NET 2.0以來,它們已被棄用。改爲使用'XmlReader.Create()'或'XmlWriter.Create()'。 –

+0

謝謝!其實真的有助於解決其他一些問題。 –

回答

2

你可以遍歷直到你得到第一個元素(這將是根)。

private string root = ""; 
while (reader.Read()) 
{ 
    //check if it's an element 
    if (reader.NodeType == XmlNodeType.Element) 
    { 
     //get the element name 
     root = reader.Name; 

     //break out of this while loop as we only want the first element 
     break; 
    } 
} 

if(root == "DiagReport") 
{ 
} 
+0

謝謝!我喜歡這個主意。我只是選擇了另一個,因爲它更緊湊。 –

+0

@Adam_G沒問題。我也贊同這個答案也是出於同樣的原因:) – keyboardP

0

剛開始讀者閱讀。它應該是你閱讀的第一件事情之一,所以你可以檢查。否則,在創建閱讀器之前,只需將字符串與字符串進行匹配即可。然而,讀者並不像dom解析器那樣重量級,它幾乎是sax解析器的包裝,所以它會逐漸處理文件。