我正在尝试从提供的xml中提取数据并使用[['BCD', 'TGH'], ['UTY', 'WEQ'], ['XZY', 'LIY']]
将其添加到对象中,但我注意到在没有值的节点上,我得到了“\ n”。
示例xml:
XmlReader
我修改过的C#的一部分:
<Items>
<Item>
<NodeA>Some Value</NodeA>
<NodeB>N</NodeB>
<NodeC />
</Item>
<Item>
...
</Item>
</Items>
是否有任何函数/方便的方法可以解决上述问题,但在while (sub_reader.ReadToFollowing("Item"))
{
var item = new Item();
sub_reader.ReadToFollowing("NodeA");
sub_reader.Read();
item.NodeA = sub_reader.Value;
sub_reader.ReadToFollowing("NodeB");
sub_reader.Read();
item.NodeB = sub_reader.Value;
sub_reader.ReadToFollowing("NodeC");
sub_reader.Read();
item.NodeC = sub_reader.Value; //This return "\n "
this.Items.Add(item);
}
发生时返回null或空字符串?真正的xml要大得多,我不想在其他每个上面做。
任何建议表示赞赏。谢谢!
答案 0 :(得分:1)
使用XDocument <NodeC/>
返回string.Empty
。这里dotNetFiddle
string xml = @"<Items>
<Item>
<NodeA>Some Value</NodeA>
<NodeB>N</NodeB>
<NodeC />
</Item>
<Item>
<NodeA>Some 2223Value</NodeA>
<NodeB>2223N</NodeB>
<NodeC>12344</NodeC>
</Item>
</Items>";
XDocument doc = XDocument.Parse(xml);
var result = doc.Root.Descendants("NodeC");
foreach(var item in result)
{
Console.WriteLine(item.Value);
}
如果您想将XDocument
反序列化为某个对象,可以查看以下答案:How do I deserialize XML into an object using a constructor that takes an XDocument?
public static MyClass FromXml (XDocument xd)
{
XmlSerializer s = new XmlSerializer(typeof(MyClass));
return (MyClass)s.Deserialize(xd.CreateReader());
}
答案 1 :(得分:1)
使用ReadElementContentAsString
方法,而不是调用Read
然后调用Value
属性:
sub_reader.ReadToFollowing("NodeA");
item.NodeA = sub_reader.ReadElementContentAsString();
sub_reader.ReadToFollowing("NodeB");
item.NodeB = sub_reader.ReadElementContentAsString();
sub_reader.ReadToFollowing("NodeC");
item.NodeC = sub_reader.ReadElementContentAsString();