将带有XML的字符串转换为数据表,列表或更易于管理的内容?

时间:2015-09-29 20:37:45

标签: c# .net xml visual-studio-2010 .net-4.0

无需手动解析文件,.Net是否可以轻松将包含XML的字符串转换为XmlElementdatatablelist或者更易于管理的东西?

这是实际的字符串。此字符串当前存储在XmlNode对象中(这是XmlNode.OuterXml),但我不知道如何转换为我实际可以使用的内容:

<ni>
    <nss>20150927</nss>
    <gp>Addon</gp>
    <ns>CounterBlah1</ns>
    <ns>CounterBlah2</ns>
    <ns>CounterSales</ns>
    <ns>CounterBlah4</ns>
    <ns>CounterBlah5</ns>
    <ns>CounterBlah6</ns>
    <nv>
        <nad>Style=1,Rfu=1,Id=132</nad>
        <r>0</r>
        <r>15</r>
        <r>8</r>
        <r>3</r>
        <r>2</r>
        <r>2</r>
    </nv>
    <nv>
        <nad>Style=1,Rfu=1,Id=433</nad>
        <r>0</r>
        <r>15</r>
        <r>30</r>
        <r>3</r>
        <r>2</r>
        <r>2</r>
    </nv>
    <nv>
        <nad>Style=1,Rfu=1,Id=665</nad>
        <r>0</r>
        <r>15</r>
        <r>90</r>
        <r>3</r>
        <r>2</r>
        <r>2</r>
    </nv>
</ni>

感谢。

2 个答案:

答案 0 :(得分:0)

试试这个

          string input = "<ni><nss>20150927</nss><gp>Addon</gp><ns>CounterBlah1</ns><ns>CounterBlah2</ns><ns>CounterSales</ns><ns>CounterBlah4</ns><ns>CounterBlah5</ns><ns>CounterBlah6</ns><nv><nad>Style=1,Rfu=1,Id=132</nad><r>0</r><r>15</r><r>8</r><r>3</r><r>2</r><r>2</r></nv><nv><nad>Style=1,Rfu=1,Id=433</nad><r>0</r><r>15</r><r>30</r><r>3</r><r>2</r><r>2</r></nv><nv><nad>Style=1,Rfu=1,Id=665</nad><r>0</r><r>15</r><r>90</r><r>3</r><r>2</r><r>2</r></nv></ni>";
            StringReader reader = new StringReader(input);

            DataSet ds = new DataSet();
            ds.ReadXml(reader);​

答案 1 :(得分:0)

使用Linq-to-Xml,您可以获得此类数据

//using System.Xml.Linq;
//using System.Linq;

//xmlStr = your xml string
var xDoc = XDocument.Parse(xmlStr);
var nvs = xDoc.Descendants("nv");
var nads = nvs.Select(nv => nv.Elements("nad").First().Value).ToList();
var thirdRs = nvs.Select(nv => nv.Elements("r").ElementAt(2).Value).ToList();

这是代码为样本xml

生成的内容
  

nads = [&#34; Style = 1,Rfu = 1,Id = 132&#34;,&#34; Style = 1,Rfu = 1,Id = 433&#34;,&#34; Style = 1,RFU = 1,ID = 665&#34; ]
  thirdRs = [&#34; 8&#34;,&#34; 30&#34;,&#34; 90&#34;]