节点上没有值的XmlReader

时间:2016-11-28 20:55:22

标签: c# xml xmlreader

我正在尝试从提供的中提取数据并使用[['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要大得多,我不想在其他每个上面做。

任何建议表示赞赏。谢谢!

2 个答案:

答案 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();