我正在处理一个奇怪的XML格式文件,这是我以前从未见过的。 (我很确定这不是XML,只是给我一个名为download.xml的文件,如果有人告诉我它是什么,我会改变问题)
我把它作为一个平面文本文件,我必须加载,而不是从流。
它是由某些第三方应用程序生成的,我无法更改。
我无法弄清楚如何将其反序列化为任何类型的对象。
我不在乎它是什么,只要它不是一个字符串。 这是一个伪造的数据集,格式为
<table name="tbl_user" entire="Y">
<columns>
<column name="user_id" class="java.lang.Long" type-id="-5" db-type="bigint" />
<column name="name" class="java.lang.String" length="255" type-id="12" db-type="varchar" />
<column name="surnname" class="java.lang.String" length="255" type-id="12" db-type="varchar" />
</columns>
<row><v>1</v><v> John</v><v>Lennon</v> </row>
<row><v>2</v><v>Paul</v><v>McCartney</v></row>
<row><v>3</v><v>George</v><v>Harrison</v></row>
<row><v>4</v><v>Ringo</v><v>Starr</v></row>
</table>
我玩过XDocument,XNode,DataTables,XmlSerializer,但一直在打结。
答案 0 :(得分:2)
这是可以反序列化为对象的有效XML。
我所做的只是使用免费在线工具(http://xmltocsharp.azurewebsites.net/)生成课程。
您还可以使用xsd.exe utility。
可以根据需要修改数据类型(例如,应该是整数的字符串)。
void Main()
{
var xml = @"
<table name=""tbl_user"" entire=""Y"">
<columns>
<column name=""user_id"" class=""java.lang.Long"" type-id=""-5"" db-type=""bigint"" />
<column name=""name"" class=""java.lang.String"" length=""255"" type-id=""12"" db-type=""varchar"" />
<column name=""surnname"" class=""java.lang.String"" length=""255"" type-id=""12"" db-type=""varchar"" />
</columns>
<row><v>1</v><v> John</v><v>Lennon</v> </row>
<row><v>2</v><v>Paul</v><v>McCartney</v></row>
<row><v>3</v><v>George</v><v>Harrison</v></row>
<row><v>4</v><v>Ringo</v><v>Starr</v></row>
</table>";
var serializer = new XmlSerializer(typeof(Table));
var table = serializer.Deserialize(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml))) as Table;
Console.WriteLine($"{table.Columns.Column.Count} columns");
Console.WriteLine($"{table.Row.Count} rows");
// Output:
// 3 columns
// 4 rows
}
[XmlRoot(ElementName = "column")]
public class Column
{
[XmlAttribute(AttributeName = "name")]
public string Name { get; set; }
[XmlAttribute(AttributeName = "class")]
public string Class { get; set; }
[XmlAttribute(AttributeName = "type-id")]
public string Typeid { get; set; }
[XmlAttribute(AttributeName = "db-type")]
public string Dbtype { get; set; }
[XmlAttribute(AttributeName = "length")]
public string Length { get; set; }
}
[XmlRoot(ElementName = "columns")]
public class Columns
{
[XmlElement(ElementName = "column")]
public List<Column> Column { get; set; }
}
[XmlRoot(ElementName = "row")]
public class Row
{
[XmlElement(ElementName = "v")]
public List<string> V { get; set; }
}
[XmlRoot(ElementName = "table")]
public class Table
{
[XmlElement(ElementName = "columns")]
public Columns Columns { get; set; }
[XmlElement(ElementName = "row")]
public List<Row> Row { get; set; }
[XmlAttribute(AttributeName = "name")]
public string Name { get; set; }
[XmlAttribute(AttributeName = "entire")]
public string Entire { get; set; }
}