2013-08-20 45 views
2

我使用ASP.NET C#中的「XmlTextReader」對象來讀取一個xml文件。 在我的代碼我真的需要像C#XML解析:如何區分自閉標籤和其他標籤?

<img src="something" /> 

和那些內部有元素自結束標記之間進行區分,並且需要結束標記,如:

<div class="anything"> 
    <img src="something" /> 
</div> 

我已經試過hasValue的方法,但它對我來說工作不好。是否有任何其他方式來檢測通過元素讀取之前的執行情況?

我可以使用ReadElementContentAsString()方法,但我真的不想那樣做。在進入之前我需要知道里面是否有東西。或者至少能夠回去。

UPDATE 這是我怎麼看我的代碼

 reader.MoveToAttribute("id"); //I know all attributes 
    if (reader.ReadAttributeValue()) 
     this.idField = reader.Value; 


    reader.MoveToElement(); 
    bool goOn = true; 
    while (goOn) 
    { 
     reader.Read(); 
     switch (reader.NodeType) 
     { 
      case XmlNodeType.Element: 
       switch (reader.Name) 
       { 

        case "div": 
         DivType newDivTypeItem = new DivType(reader); 
         this.itemsField.Add(newDivTypeItem); 
         this.itemsElementNameField.Add(ItemsChoiceType17.div); 
         break; 
        other cases... 
       } 
       break; 
      case XmlNodeType.Text: 
       this.textField.Add(reader.Value); 
       break; 
      case XmlNodeType.EndElement: 
       goOn = false; 
       break; 
     } 
    } 
+2

你一定需要使用'XmlTextReader'嗎?如果你的XML很大,那麼它是有意義的,但是否則我會使用LINQ到XML ...... –

+0

事實上,當我第一次需要解析XML時,我並不知道LINQ to XML。不過,我已經根據我的搜索與XmlTextReader一起去了,到目前爲止效果非常好。發佈的問題是我現在唯一的問題。我猜,LINQ to XML會更好。但重做代碼會困難得多。我很感謝用XmlTextReader解決這個問題。 PS:我會更新我的問題 – himura

+1

僅供參考,您不應該使用'new XmlTextReader()'或'new XmlTextWriter()'。自.NET 2.0以來,它們已被棄用。改爲使用'XmlReader.Create()'或'XmlWriter.Create()'。這是爲什麼不通過互聯網學習的完美例子。您的搜索找到了過時的信息。 –

回答

2

是你想要的IsElementEmpty property?你究竟如何閱讀你的文件,這樣即將出現?

+0

你好,我已經添加了我用來閱讀的循環。我爲每個可能的元素創建了一個類,每個類構造函數都有一個XmlTextReader對象作爲參數。結果是元素的遞歸閱讀。該代碼非常強大,但缺少一些元素的結束標籤給我帶來了問題。我只需要檢測它們 – himura

+0

那是不是你想要的財產? –

+0

是的,它似乎就是我正在尋找的!我很驚訝,我錯過了它。我試圖惡魔。我的屬性找不到它。我多麼愚蠢。對不起,謝謝。 – himura