如何使用"MSTest XML数据源"来处理"深层"XML数据?

9

我在使用MSTest和XML数据源时遇到了一些问题。假设我有一个看起来像这样的XML文件:

<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>

然而,我的问题是我无法获取 Name 元素:

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

我想这可能更像是一个DataRow的问题,但是任何帮助都将不胜感激。

编辑:

即使我将DataRow复制到一个新的DataTable并编写XML,Name元素也不存在:

[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");
}

对于第一行,这会产生以下结果:
<?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <User>
    <Id>1</Id>
  </User>
</DocumentElement>
1个回答

1

我也遇到过这样的问题,以下是我解决它的方法:

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

"User_Name"是将用户表和姓名表绑定的子关系的名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接