xmlreader.value到C#中的字符串转换

时间:2014-12-11 15:12:43

标签: c# .net xml console-application

我试图从XML文件中读取字体(我自己的,由特殊类定义)。

有趣的是我可以读取数字并将它们解析为int,甚至可以获得十六进制值," chop"它在三个或部分上获得ARGB值,但我无法做到最简单的部分:)

我的xml阅读器不想将值设置为字符串:

myFont.name = xReader.Value.ToString();

myFont.name的价值我总是空着,即使我试图将其剁成单个字符并逐个添加到myFont.name字符串(我绝望的决定)

但是,正如我所说,我可以使用相同的方式读取int值:

myFont.size = int.Parse(xReader.Value.ToString());
//returns correct value for the size

我也可以在控制台窗口中显示它:

Console.Writeline(xReader.Value); //returns correct string
myFont.name=xReader.Value;
Console.Writeline(myFont.name.ToString()); //returns empty string

有什么想法吗?

编辑: 字体类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication6.entities
{
public class PDFFont
{

    public int size { get; set; }
    public int ColorR { get; set; }
    public int ColorG { get; set; }
    public int ColorB { get; set; }
    public int ColorA { get; set; }
    public string name { get; set; }
}
}

EDIT2: 开关箱结构:

 while (Xread.MoveToNextAttribute())
                            {
                                entities.PDFFont newFont = new entities.PDFFont();
                                switch (Xread.Name)
                                {
                                    case "name":

                                        newFont.name = Xread.Value.ToString();
//returns null
                                        break;
                                    case "size": newFont.size = int.Parse(Xread.Value.ToString()); break;
//returns null, however before I create method below worked ok

                                    case "color":

                                        colorCreator nColor = new colorCreator(Xread.Value);
                                        newFont.ColorR = nColor.R;
                                        newFont.ColorG = nColor.G;
                                        newFont.ColorB = nColor.B;
                                        newFont.ColorA = nColor.A;
//works perfectly, values are transfer corectly 

                                        break;
                                }

我还尝试在交换机外壳结构外部设置此值,在另一个对象上运行。所以上面写的部分有问题。 我刚刚把console.writeline("听到了!");在newFont.name = xRead.Value和break之间,它显示自己。所以我知道那个案例" name"在我的xml文件中找到。

2 个答案:

答案 0 :(得分:0)

可能你正在某处清除name属性的内容。放一个断点,一步一步走。

答案 1 :(得分:0)

我无法做任何有创意的事情,所以我决定重建这个建筑。感谢MoveToAttribute(string)方法。

     try
                        {                                
                            Xread.MoveToAttribute("name");
                            newFont.name = Xread.Value.ToString();
                        }
                        catch { newFont.name = "default"; }

                        try
                        {
                            Xread.MoveToAttribute("size");
                            newFont.size = int.Parse(Xread.Value.ToString());
                        }
                        catch { newFont.size = 12; }
                        try
                        {
                             Xread.MoveToAttribute("color");
                             colorCreator nColor = new colorCreator(Xread.Value);
                                            newFont.ColorR = nColor.R;
                                            newFont.ColorG = nColor.G;
                                            newFont.ColorB = nColor.B;
                                            newFont.ColorA = nColor.A;
                                        }
                                        catch {
                                            newFont.ColorR = 0;
                                            newFont.ColorG = 0;
                                            newFont.ColorB = 0;
                                            newFont.ColorA = 255;
                                        }