gpt4 book ai didi

c# - 如何在 .NET 中解析联合和列表类型的值?

转载 作者:数据小太阳 更新时间:2023-10-29 01:59:31 27 4
gpt4 key购买 nike

我有一个 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>元素是一个列表。

我的问题是,如何解析 <xs:union><xs:list> .NET 中的元素?

如何检查 union 元素中的值具有哪种数据类型?

如何提取列表元素中的元素并将它们转换为 C# 列表?

System.XML 是否内置支持这种解析,还是需要我自己编写解析代码?

最佳答案

希望得到更好的答案,但是,

我觉得你需要自己写。

如果你想要一个通用的解析器来处理 xs:listxs: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;
}
}

关于c# - 如何在 .NET 中解析联合和列表类型的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com