在xml中查找头值 [英] Finding header value in xml

查看:184
本文介绍了在xml中查找头值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里我的xml设置如下:
这是通过webservice来。

Here my xml is setup as follows: This is coming via a webservice.

<doc>
<str name="data_id">XXXXXXX</str>
<str name="data">YYYY</str>
<str name="data2">zzzz</str>
...
..
<doc>

<doc>
<str name="data_id">X1X1X1X1X1X1X1</str>
<str name="data">Y1Y1Y1Y1</str>
<str name="data2">z1z1z1z1</str>
...
..
<doc>

我将整个xml转换为数据表。

I am converting the whole xml into a datatable.

如何将列标题作为列属性。
生成的数据表必须格式为

How do I get the column header as column attributes. The resulting datatable have to be in the format as

data_id   data
xxxxx     yyyy

加载xmldocument后,我有以下代码,我将所有内容转换成csv字符串。

After loading xmldocument I have the following code which I have written to convert the whole thing into a csv string.

Stream k = r.GetResponse().GetResponseStream();
string csvOut = string.Empty;
var doc = XDocument.Load(k);
StringBuilder sb = new StringBuilder(100000);
DataTable table1 = new DataTable();

foreach (XElement node in doc.Descendants("doc"))
{
    foreach (XElement innerNode in node.Elements())
    {

        sb.AppendFormat("{0},", innerNode.Value);
    }
    sb.Remove(sb.Length - 1, 1);
    sb.AppendLine();
}
csvOut = sb.ToString();

我正在尝试将头标作为data_id,数据等

I am trying to get the headers as data_id , data etc

推荐答案

var xdoc = XDocument.Load(path_to_xml);
DataTable dt = new DataTable();

// Get all column names from document
var columnNames = xdoc.Root.Descendants("str")
                      .Select(s => (string)s.Attribute("name"))
                      .Distinct();

// create column for each unique str
foreach(var columnName in columnNames)
   dt.Columns.Add(new DataColumn(columnName));

foreach(var doc in xdoc.Root.Elements("doc"))
{
   var row = dt.NewRow();

   // fill row values
   foreach(var str in doc.Elements("str"))
       row[(string)str.Attribute("name")] = (string)str;

   dt.Rows.Add(row); // add row
}

如果所有文档都包含完全相同的 str 元素,那么您可以用

If all docs contain exactly same set of str elements, then you can replace column names getting with

var columName = xdoc.Root.Element("doc").Elements("str")
                    .Select(s => (string)s.Attribute("name"));

这将只读第一个< doc> 节点,而不是遍历xml文档中的所有元素。

That will read only first <doc> node instead of traversing all elements in xml document.

这篇关于在xml中查找头值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆