2011-10-11 26 views
8

Tôi đang gặp một số vấn đề với MSTest bằng cách sử dụng Nguồn dữ liệu XML. Giả sử rằng tôi đã có một tập tin XML trông như thế này:Cách sử dụng XML "sâu" với MSTas XML MSTest

<Users> 
    <User> 
     <Id>1</Id> 
     <Name> 
      <First>Mike</First> 
      <Last>Paterson</Last> 
     </Name> 
    </User> 
    <User> 
     <Id>2</Id> 
     <Name> 
      <First>John</First> 
      <Last>Doe</Last> 
     </Name> 
    </User> 
</Users> 

Vấn đề của tôi, tuy nhiên, là tôi không thể nhận được ahold của phần tử Name:

var name = row["Name"]; 
System.ArgumentException: Column 'Name' does not belong to table User. 

Tôi cho rằng điều này có thể nhiều hơn một câu hỏi DataRow nhưng bất kỳ sự trợ giúp nào cũng sẽ được đánh giá cao.

EDIT:

Thậm chí nếu tôi sao chép các DataRow vào một DataTable mới và viết XML phần tử Tên là không có mặt:

[DeploymentItem("XmlDatasourceTest\\Users.xml"), DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\Users.xml", "User", DataAccessMethod.Sequential), TestMethod] 
public void TestMethod1() 
{ 
    var row = TestContext.DataRow; 

    DataTable table = row.Table.Copy(); 

    foreach (DataRow r in table.AsEnumerable().ToArray()) 
    { 
     r.Delete(); 
    } 

    table.ImportRow(row); 

    table.WriteXml(@"C:\test.xml"); 
} 

Đối với hàng đầu tiên, sản lượng này:

<?xml version="1.0" standalone="yes"?> 
<DocumentElement> 
    <User> 
    <Id>1</Id> 
    </User> 
</DocumentElement> 

Trả lời

1

Tôi cũng đã gặp phải vấn đề như vậy và đây là cách tôi có thể giải quyết vấn đề này:

DataRow dataRow = TestContext.DataRow.GetChildRows("User_Name").First(); 
string s = (string)dataRow["First"]; // s = "Mike" 

"User_Name" - là tên của mối quan hệ con liên kết với bảng Người dùng và bảng Tên.