2011-07-25 140 views
1

我使用System.Xml從我的xml file獲取屬性。XmlAttributeCollection無法從xml獲取屬性

看來,下面的代碼,我在什麼地方找到能夠找到正確的節點但它不識別的屬性(這是奇怪,因爲我已經創建了這個的System.Xml XML文件太):

DataSet task_data = new DataSet("Root"); 
adapter.Fill(task_data); // MySqlDataAdapter is being used here 
task_data.WriteXml(path, XmlWriteMode.WriteSchema); 

所以我不知道爲什麼其他任何XML可以在互聯網上的作品和我這是創造了在同一個模塊沒有找到......

using System; 
using System.Xml; 
using System.IO; 

public class Catalog 
{ 
private XmlDocument xmldoc; 
private string path = @"C:\Users\Me\Desktop\task.xml"; 

public static void Main() 
{ 
    Catalog c = new Catalog(); 
} 

public Catalog() 

//Constructor 
{ 
    FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
    xmldoc = new XmlDocument(); 
    xmldoc.Load(fs); 
    DisplayCatalog(); 
} 

// Method for Displaying the catalog 

private void DisplayCatalog() 
{ 
    XmlNodeList xmlnode = xmldoc.GetElementsByTagName("task"); 
    Console.WriteLine("Here is the list of catalogs\n\n"); 

    for (int i = 0; i < xmlnode.Count; i++) 
    { 
     XmlAttributeCollection xmlattrc = xmlnode[i].Attributes; //HERE IS THE PROBLEM!!! 

     Console.Write(xmlnode[i].FirstChild.Name); 
     Console.WriteLine(":\t\t" + xmlnode[i].FirstChild.InnerText); 


     Console.Write(xmlnode[i].LastChild.Name); 
     Console.WriteLine(":\t" + xmlnode[i].LastChild.InnerText); 
     Console.WriteLine(); 
    } 

    Console.WriteLine("Catalog Finished"); 
} 
//end of class 

}

+0

的預測是什麼xml文件看起來像你想讀的一些其他的方式?你看到的行爲是什麼?你期望什麼? – Laepdjek

+0

http://student.agh.edu.pl/~wysek/task.xml這是我的xml文件和xmlnode [i] .Attributes在加載xml後不存儲任何屬性,即使xml文件是有效的,因爲它已創建由相同的模塊。我想獲得第一個和最後一個分組。 – Michal

回答

2

這是鏈接到contins的xml沒有屬性的唯一節點。

<?xml version="1.0" standalone="yes"?> 
<Root> 
    <task> 
    <TaskId>1</TaskId> 
    <TaskDelegatorNote>Presentation</TaskDelegatorNote> 
    <StartTime>PT10H</StartTime> 
    <EndTime>PT13H</EndTime> 
    <TaskEndDate>2011-01-02T00:00:00+00:00</TaskEndDate> 
    <TaskContractorNote>Done</TaskContractorNote> 
    <TaskStatus>3</TaskStatus> 
    <LastModification>Me, 2003-05-15 13:48:59</LastModification> 
    </task> 
    <task> 
    <TaskId>2</TaskId> 
    <TaskDelegatorNote>It must be done.</TaskDelegatorNote> 
    <StartTime>PT10H</StartTime> 
    <EndTime>PT13H</EndTime> 
    <TaskEndDate>2011-01-02T00:00:00+00:00</TaskEndDate> 
    <TaskContractorNote /> 
    <TaskStatus>2</TaskStatus> 
    <LastModification>Admin, 2009-08-04 10:30:49</LastModification> 
    </task> 
</Root> 

下面是一個XML snippint與任務id屬性

<task TaskId = 1> 
    </task> 

要解決這一變化

 Console.Write(xmlattrc[0].Name); 
     Console.WriteLine(":\t\t" + xmlattrc[0].Value); 

 Console.Write(xmlnode[0].ChildNodes[0].Name); 
     Console.WriteLine(":\t\t" + xmlnode[0].ChildNodes[0].Value); 

你的產出將是

Here is the list of catalogs 


TaskId: 
TaskId:   1 
LastModification:  Me, 2003-05-15 13:48:59 

TaskId: 
TaskId:   2 
LastModification:  Admin, 2009-08-04 10:30:49 

Catalog Finished 
Press any key to continue . . . 

你也應該看看LinqToXML做你的XML節點

+0

好的,謝謝我仍然試圖破解這些XML文件 – Michal