使用XElement作为模板将DataTable转换为XML

时间:2013-12-26 07:09:20

标签: c# xml linq linq-to-xml

我有XElement(表格模板),下一个代码:

 <table border="0" cellpadding="0" cellspacing="0" width="920" align="center">
 <tr>
     <td valign="top" width="200">
     </td>
     <td valign="top" width="400">
     </td>
 </tr>
 </table>

我还有DataTable,其中包含2列,例如5行。需要使用表格模板将此DataTable中的数据放入新XElement。我认为我的功能应该是这样的:

public XElement Filling(XElement htmlTable, DataTable dataTable)

但我不知道如何从htmlTable获取部分代码: 例如,如何才能获得具有属性td的第一个width="200"

任何建议

由于

2 个答案:

答案 0 :(得分:1)

我完全不理解这个问题,但这是一个如何仅使用属性td获取第一个width="200"的示例,假设htmlTable包含所示的html:

var firstTd = htmlTable.Descendants("td").FirstOrDefault(o => o.Attribute("width").Value == "200");
  • htmlTable.Descendants("element_name")会在表格标记内获取任何html元素(在这种情况下为trtd)。

答案 1 :(得分:0)

private DataTable ParseHtmlTable( string html )
{
DataTable retVal = new DataTable();
XElement data = XElement.Parse( html );

// Gets rows of values.
List<string[]> records = ( from row in data.Descendants( "TR" ) select ( from cell in row.Descendants( "TD" ) select cell.Value ).ToArray() ).ToList();

// Ensure maximum columns
retVal.Columns.AddRange( new DataColumn[ records.Max( x => x.Length ) ] );

// Add records
records.ForEach( x => retVal.Rows.Add( x ) );

return retVal;
}