Linq到Xml:异常 - ''字符,十六进制值0x20,不能包含在名称中

时间:2014-01-16 06:43:46

标签: .net linq entity-framework linq-to-xml

这是我的实体类,包含实体:

[Table(Name = "CLINICAL_ITEM_MASTER")]
public class ClinicalItemMaster
{
    [Column]
    public int CLIENT_INPUT_MHS_ID { get; set; }
    [Column]
    public Guid CLIENT_INPUT_MHS_GUID { get; set; }
    [Column]
    public string ITEM { get; set; }
    [Column]
    public int ITEM_ID { get; set; }
    [Column]
    public string ITEM_NUMBER { get; set; }
    [Column]
    public string CATEGORY { get; set; }
    [Column]
    public string DESCRIPTION { get; set; }       
    [Column]
    public DateTime? CREATE_DTTM { get; set; }
    [Column]
    public DateTime? UPDATE_DTTM { get; set; }
}

在这里,我使用Linq to XML(SQL)方法访问数据库表数据:

private XElement GetClinicalItemMaster()
{
    try
    {
        using (MyDatabase db = new MyDatabase())
        {
            return new XElement("CLINICALITEMMASTER",
                   from cim in db.TblClinicalItemMaster                           
                   select new XElement("Record",
                       new XElement("CLIENT_INPUT_MHS_ID", cim.CLIENT_INPUT_MHS_ID),
                       new XElement("CLIENT_INPUT_MHS_GUID", cim.CLIENT_INPUT_MHS_GUID.ToString()),
                       new XElement("ITEM ", cim.ITEM),
                       new XElement("ITEM_ID ", cim.ITEM_ID),
                       new XElement("ITEM_NUMBER ", cim.ITEM_NUMBER.ToString()),
                       new XElement("CATEGORY ", cim.CATEGORY.ToString()),
                       new XElement("DESCRIPTION ", cim.DESCRIPTION),
                       new XElement("MFG_CODE ", cim.MFG_CODE)      ));
        }

但在这里我收到了这个错误:

  

'[white space]'字符,十六进制值0x20,不能包含在名称中。

列是cim.ITEM,根据我的分析,它是一个非Nullable列,但是从DataBase获取数据得到Null(每列的数据为Null)

3 个答案:

答案 0 :(得分:36)

元素名称中有空格,XML中不允许使用空格:

new XElement("ITEM ", cim.ITEM), // starting from this element
//                ^ here

删除空格以使元素名称有效。顺便说一下,将null作为元素值是完全可以的。

答案 1 :(得分:3)

如果您尝试在其任何XElement /节点中创建包含空格的XML文件,通常会发生这种情况。 确保Xml节点名称中没有任何空格。

示例:

这会抛出错误,因为" 帐号" XElement或节点,在XML中不允许。

XDocument xdoc = new XDocument(
                            new XDeclaration("1.0", "utf-8", "yes"),
                            new XComment("Create Sample Xml from Dyanamic Data"),
                            new XElement("Company",
                                new XElement("Employees",
                                    from e in DAL.GetEmp()
                                    select 
                                    new XElement("Employee", new XAttribute("id", e.Id),
                                        new XElement("EmpName", e.Name),
                                        new XElement("Designation", e.Designation),
                                        new XElement("Location", e.Location),
                                        new XElement("Account Number", e.Account),
                                        new XElement("PAN", e.Pan),
                                        new XElement("PF", e.PF)))));
        xdoc.Save(@"D:\DynamicFile.xml"); 

只需删除" 帐号"中的空格XElement to" AccountNumber "。 它完成了。如果你错误地创造了空间,那就寻找空间。 希望它可以帮到某人。

答案 2 :(得分:0)

对于使用白色空格添加Description装饰器并且遇到错误的人,可能会出现同样的异常。例如:

[Description("My Property")]
public string MyProperty { get; set; } 

当你跑步时:

new XElement("MyProperty", myObject.MyProperty );

你会有同样的例外。