2016-07-28 155 views
2

例如,我有以下類型的條件:如何檢查是否一個元素標籤是結束元素

if (reader.IsStartElement("element1")) 
{ 
    while (true) 
    { 
     if (reader.IsStartElement("element2")) 
     { 
      // Doing stuff 
      reader.ReadEndElement(); //closes element2 tag 
     } 
     else if (reader.IsStartElement("element3")) 
     { 
      // Doing stuff 
      reader.ReadEndElement(); //closes element3 tag 
     } 
     else if ((!reader.IsStartElement("element2")) 
       && (!reader.IsStartElement("element3")) 
       && (!reader.IsEndElement("element1"))) // THIS IS MY ISSUE 
     { 
      throw new XmlException("exception"); 
     } 
     else 
     { 
      reader.ReadEndElement(); //closes element1 tag 
     }  
    } 
} 

我的XML是寫在下面的格式類型:

<element1> 
    <element2> 
    </element2> 
    <element3> 
    </element3> 
</element1> 

什麼我想要做的是說,如果element1中有一個元素不是element2element3而且不是element1的結束元素標記,則會拋出我寫入的異常。問題是沒有辦法檢查我能找到的XmlReader的結束元素標記。我可以檢查reader.IsStartElement但不是reader.IsEndElement。有另一種方法可以檢查類型是否是最終元素?

+1

有更好的方法與XMLReader可以讀取XML驗證它的結束標記部件1。看到我的代碼在下面張貼:http://stackoverflow.com/questions/34274568/how-to-read-an-xml-file-by-using-xmlreader-in-c-sharp – jdweng

回答

3

您可以檢查節點類型,然後使用reader.Name

if (reader.NodeType == XmlNodeType.EndElement) 
{ 
    if(reader.Name == "element1") 
    { 
     //it's element1 end tag 
    } 
    else 
    { 
     //it's the end tag for something else 
    } 
} 
+0

有道理。是否在這種情況下,如果((!!reader.IsStartElement(「element2」)) &&(!reader.IsStartElement(「element3」)) &&(!reader.Name!=「element1」))工作還是一個壞主意?因爲在這種情況下,我想我不需要驗證它不是結束元素,如果我可以驗證讀者不是結尾元素的名稱,如果這很有意義 – Tim

+0

我認爲這將起作用。 –

+0

很酷。只是好奇。感謝您的提示 – Tim

2

您應該使用reader.Read()來移動XML,並看看讀者的NodeType

枚舉XmlNodeType包含ElementEndElement的值。

+0

我需要使用閱讀器。在每個條件之後讀()以便能夠移過該元素並繼續下一個? – Tim

+0

另外,當我嘗試這個它會拋出一個錯誤,說我不能使用!運算符與XmlNodeType。我需要確定我正在查看的元素標記不是element1的結束標記... – Tim

+0

您應該最有可能在'while()'條件中使用'.Read()',而不是使用無限循環。請參閱我鏈接到的頁面中的示例。爲了比較枚舉值,可以使用'!=':'reader.NodeType!= XmlNodeType.EndElement'。 – JLRishe

相關問題