如何解析.net中联合和列表类型的值
本文关键字:列表 类型 何解析 net | 更新日期: 2023-09-27 18:11:06
我有一个XML Schema,其中包括使用<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中是否有对这种解析的内置支持,还是我需要自己编写解析代码?
希望有一个更好的答案,但是,
我想你应该自己写。
如果你想为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;
}
}