将带有 XML 的字符串转换为数据表、列表或更易于管理的内容?
Convert string with XML to datatable, list or something more manageable?
无需手动解析文件,.Net
是否可以轻松地将带有 XML
的字符串转换为 XmlElement
、datatable
、[=16] =] 或更易于管理的东西?
这是实际的字符串。此字符串当前存储在 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>
谢谢。
试试这个
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);
使用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 = [ "Style=1,Rfu=1,Id=132", "Style=1,Rfu=1,Id=433", "Style=1,Rfu=1,Id=665" ]
thirdRs = [ "8", "30", "90"]
无需手动解析文件,.Net
是否可以轻松地将带有 XML
的字符串转换为 XmlElement
、datatable
、[=16] =] 或更易于管理的东西?
这是实际的字符串。此字符串当前存储在 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>
谢谢。
试试这个
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);
使用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 = [ "Style=1,Rfu=1,Id=132", "Style=1,Rfu=1,Id=433", "Style=1,Rfu=1,Id=665" ]
thirdRs = [ "8", "30", "90"]