将此 XML 解析为对象 [关闭]
Posted
技术标签:
【中文标题】将此 XML 解析为对象 [关闭]【英文标题】:Parse This XML to object [closed] 【发布时间】:2015-01-16 04:41:23 【问题描述】:由于某种原因,这被那些对 xml 和对象知之甚少的用户投票否决。这绝对不是一个广泛的问题。这是 XML,并使用合格的答案转换为对象。
我有以下 XML,但我不确定如何将其解析为对象。我不熟悉这种类型的 xml。我的第一步是什么?我想把它解析成一个对象。
<?xml version="1.0" encoding="UTF-8" ?>
<DATA_PROVIDERS UID="Providers|REP" FORCE_REFRESH="FALSE" DATA_PROVIDER="" FORMATTED="FALSE" REFRESH="TRUE">
<DATA_PROVIDER NAME="Prov" SOURCE="Provider" DATE="11/18/2014" DURATION="9s" REFRESH="TRUE" CUBE="1">
<COLUMN INDEX="0" ID="119" TYPE="String" FORMAT="">Prov ID</COLUMN>
<COLUMN INDEX="1" ID="118" TYPE="String" FORMAT="">Prov Name</COLUMN>
<COLUMN INDEX="2" ID="113" TYPE="String" FORMAT="">Address Info</COLUMN>
<COLUMN INDEX="3" ID="110" TYPE="String" FORMAT="">Enroll Status Code</COLUMN>
<COLUMN INDEX="4" ID="119" TYPE="String" FORMAT="">Phone</COLUMN>
<COLUMN INDEX="5" ID="110" TYPE="String" FORMAT="">Fax</COLUMN>
<COLUMN INDEX="6" ID="109" TYPE="String" FORMAT="">Provider Status</COLUMN>
<COLUMN INDEX="7" ID="150" TYPE="Date" FORMAT="m/d/yyyy h:mm:ss am/pm">Provider Start Date</COLUMN>
<ROW>
<CELL INDEX="0">004042111</CELL>
<CELL INDEX="1">CONTOSO West INC</CELL>
<CELL INDEX="2">1234 Random Rd. SOMECITY, ZZ 12345 9876</CELL>
<CELL INDEX="3">F</CELL>
<CELL INDEX="4">5555551234123</CELL>
<CELL INDEX="5">5555551234</CELL>
<CELL INDEX="6">F - Agency Action</CELL>
<CELL INDEX="7">5/31/2011 12:00:00 AM</CELL>
</ROW>
<ROW>
<CELL INDEX="0">004011117</CELL>
<CELL INDEX="1">CONTOSO North INC</CELL>
<CELL INDEX="2">4321 Random Rd. SOMECITY, ZZ 12345 9876</CELL>
<CELL INDEX="3">F</CELL>
<CELL INDEX="4">5555551234123</CELL>
<CELL INDEX="5">5555551234</CELL>
<CELL INDEX="6">F - Agency Action</CELL>
<CELL INDEX="7">5/31/2011 12:00:00 AM</CELL>
</ROW>
</DATA_PROVIDER>
</DATA_PROVIDERS>
【问题讨论】:
I am not familiar with this type of xml
这个 xml 没有什么特别之处。您可以使用任何有关 xml 解析的文档。 (顺便说一句:如果您的问题不是为我写,请发布您到目前为止所做的事情)
取决于object
是什么以及您要如何解析它
如果这是有效的 XML,为什么不使用 DataTable.LoadFromXML() 以及 DataSetor 东西并以这种方式遍历数据集..? msdn.microsoft.com/en-us/library/fx29c3yd(v=vs.110).aspx
@DJKRAZE:并非所有 XML 都映射到数据集
我知道约翰这就是为什么我用if this is valid XML
限定它,但我同意
【参考方案1】:
如果您使用的是 Visual Studio 2012(或更高版本)并且您的目标是 .NET 4.5(或更高版本),那么 Visual Studio 可以为您创建一个匹配 XML 的类:
将 XML 复制到剪贴板 在 Visual Studio 中:编辑 --> 选择性粘贴 --> 将 XML 粘贴为类然后您需要将 XML 中的数据序列化到新创建的类中以创建新对象:
var myObject = LoadFromXmlString<DATA_PROVIDERS>(xmlData);
public static T LoadFromXmlString<T>(string xml)
T retval = default(T);
try
XmlSerializer s = new XmlSerializer(typeof(T));
MemoryStream ms = new MemoryStream(ASCIIEncoding.Default.GetBytes(xml));
retval = (T)s.Deserialize(ms);
ms.Close();
catch (Exception ex)
ex.Data.Add("Xml String", xml);
throw new Exception("Error loading from XML string. See data.", ex);
return retval;
【讨论】:
我不知道你能做到这一点——这很酷。 这是VS的哪个版本,哪个版本? @JohnSaunders 我认为是 2012 年(甚至可能是 2010 年)以后的所有版本。编辑:到 2010 年不适用 刚在VS2013 Ultimate中试过。它有“将 JSON 粘贴为类”,但没有“将 XML 粘贴为类” msdn.microsoft.com/en-us/library/hh371548(v=vs.110).aspx以上是关于将此 XML 解析为对象 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章