将此 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 解析为对象 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JSON文件解析给出对象名称而不是内容[关闭]

java中的xml dom解析器? [关闭]

用于 Java 的 HTML/XML 解析器 [关闭]

将一个非常简单的 XML 字符串解析为 NSDictionary [关闭]

快速、轻量级的 XML 解析器 [关闭]

将部分 XML 字符串解析为 XElement 列表