【问题标题】:Converting DataTable to XML using XElement as template使用 XElement 作为模板将 DataTable 转换为 XML
【发布时间】:2013-12-26 15:50:56
【问题描述】:

我有一个带有下一个代码的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"

任何建议

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    var firstTd = htmlTable.Descendants("td").FirstOrDefault(o => o.Attribute("width").Value == "200");
    
    • htmlTable.Descendants("element_name") 将获取 table 标记内的任何 html 元素(在本例中为 trtd)。

    【讨论】:

    • 你让我大开眼界。非常感谢!
    【解决方案2】:
    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多