【问题标题】:Convert string with XML to datatable, list or something more manageable?将带有 XML 的字符串转换为数据表、列表或更易于管理的东西?
【发布时间】:2015-09-29 20:37:45
【问题描述】:

在无需手动解析文件的情况下,.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>

谢谢。

【问题讨论】:

  • 是的,确实如此。你到底想从字符串中得到什么?
  • 我想通过获取每个&lt;nv&gt;&lt;nad&gt; 来迭代字符串,然后在每个&lt;nv&gt; 中获取第三个&lt;r&gt;
  • 如果这就是你想要的,我的回答会很适合你。

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


【解决方案1】:

使用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 = [ "样式=1,Rfu=1,Id=132", "样式=1,Rfu=1,Id=433", "样式=1,Rfu=1,Id=665" ]
thirdRs = [ "8", "30", "90"]

【讨论】:

  • @rbhatup 很高兴它有帮助。
【解决方案2】:

试试这个

          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);​

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多