gpt4 book ai didi

c# xml element() 选择未定义的元素

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:01 24 4
gpt4 key购买 nike

我创建了以下 xml

    <Fields xmlns="http://tempuri.org/XMLSchema1.xsd:Fields">
<Field Name="ServiceProviderName">
<ID>0</ID>
</Field>
<Field Name="TransactionNumber">
<ID>1</ID>
<Padding Length="8" PadChar="0"/>
<MaxLength>10</MaxLength>
</Field>
<Field Name="Sim">
<ID>2</ID>
<Head>8927</Head>
<Padding Length="15" PadChar="0"/>
</Field>
</Fields>

我正在尝试使用 linq 将其分配给一个对象。我已经定义了一个名为 N2NField 的对象

var xe = (from root in xdb.Descendants(NameSpace + "Field") 
where root.Attribute("Name").Value.Equals(Name)
select new N2NField
{
Name = root.Attribute("Name").Value,
ID = int.Parse(root.Element(NameSpace+"ID").Value),
Default = root.Element(NameSpace + "Default").Value,
Head = root.Element(NameSpace + "Head").Value,
Tail = root.Element(NameSpace + "Tail").Value,
MinLength = int.Parse(root.Element(NameSpace + "MinLength").Value),
MaxLength = int.Parse(root.Element(NameSpace + "MaxLength").Value)

}).First();

我在搜索 Name="Sim"时收到一个对象未​​设置为对象错误的实例。我知道发生这种情况是因为在 xml 字段中,如 Tail、MinLength、MaxLength 等尚未设置。这是合乎逻辑的,因为我的 xsd 定义那些 minoccurrences 被设置为 0。理论上,xml 中会有一些字段有一些字段,而没有其他字段和强制字段。

有什么方法可以检查这些字段是否存在,以及它们是否没有将这些属性的对象 N2NField 值指定为 null?我不想被迫在 xsd 中强制所有字段。有什么想法吗?

编辑 - N2N 字段类

public class N2NField { 
public string Name { get; set; }
public int ID { get; set; }
public string Default { get; set; }
public string Head { get; set; }
public string Tail { get; set; }
public int MinLength { get; set; }
public int MaxLength { get; set; }
}

最佳答案

似乎您的 XML 中没有某些节点;请注意,我删除了 .Value 属性并向字符串添加了一个转换。

var xe = (from root in xdb.Descendants(NameSpace + "Field")
where root.Attribute("Name").Value.Equals("Sim")
select new N2NField
{
Name = (string)root.Attribute("Name"),
ID = int.Parse((string)root.Element(NameSpace + "ID") ?? "0"),
Default = (string)root.Element(NameSpace + "Default"),
Head = (string)root.Element(NameSpace + "Head"),
Tail = (string)root.Element(NameSpace + "Tail"),
MinLength = int.Parse((string)root.Element(NameSpace + "MinLength") ?? "0"),
MaxLength = int.Parse((string)root.Element(NameSpace + "MaxLength") ?? "0")
}).First();

HTH

关于c# xml element() 选择未定义的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572423/

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