如何在 .NET 中解析联合和列表类型的值?
Posted
技术标签:
【中文标题】如何在 .NET 中解析联合和列表类型的值?【英文标题】:How do I parse values of union and list types in .NET? 【发布时间】:2011-12-05 22:44:31 【问题描述】:我有一个 XML 架构,其中包含使用 <xs:union>
和 <xs:list>
的数据类型。以下是摘录:
<xs:simpleType name="mixeduniontype">
<xs:union memberTypes="xs:boolean xs:int xs:double xs:string"/>
</xs:simpleType>
<xs:simpleType name="valuelist">
<xs:list itemType="xs:double"/>
</xs:simpleType>
这是一个示例 XML 片段:
<value>42</value>
<value>hello</value>
<values>1 2 3.2 5.6</values>
上面的两个<value>
元素是联合,下面的<values>
元素是一个列表。
我的问题是,如何在 .NET 中解析 <xs:union>
和 <xs:list>
元素?
如何检查联合元素中的值具有哪种数据类型?
如何提取列表元素中的元素并将它们转换为 C# 列表?
System.XML 中是否有内置支持这种解析,还是需要我自己编写解析代码?
【问题讨论】:
您是否考虑过使用xsd.exe
从模式生成类?
使用 XmlDocument.GetElementsByTagName
【参考方案1】:
希望有更好的答案,但是,
我觉得你需要自己写。
如果您想要一个通用解析器来处理xs:list
和xs:union
的所有可能实例,您会遇到一个更困难的问题,但对于您的特定架构,它相当简单。
//assuming parent is the containing node
//Parse your 'valuelist'
var newList = new List<double>();
foreach (string s in parent.XElement("values").value.Split(" ")) //should check for nulls here
double value = 0.0;
if (double.TryParse(s, value))
newList.Add(value);
else
\\throw some format exception
//Parse your 'mixeduniontype'
Type valueType = typeof string;
double doubleValue;
int intValue;
boolean booleanValue;
var stringValue = parent.XElement("value").First();
if (double.TryParse(stringValue, doubleValue))
valueType = typeof double;
else
if (int.TryParse(stringValue, intValue))
valueType = typeof int;
else
if (bool.TryParse(stringValue, booleanValue))
valueType = typeof boolean;
【讨论】:
以上是关于如何在 .NET 中解析联合和列表类型的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 asp.net 中使用 select2 返回下拉列表的值?