Linq to Xml: Исключение - символ '', шестнадцатеричное значение 0x20, не может быть включен в имя

Это мой класс Entity с сущностью:

[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)      ));
        }

Но здесь я получаю эту ошибку:

Символ '[пробел]', шестнадцатеричное значение 0x20, не может быть включен в имя.

Столбец cim.ITEM, согласно моему анализу, это столбец Non-Nullable, но при получении данных из базы данных, получающих нуль (данные для этого столбца равны Null)

Ответы

Ответ 1

У вас есть белые пробелы в именах элементов, которые не разрешены в XML:

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

Удалите пробелы, чтобы имена элементов были действительными. BTW это полностью ОК, чтобы иметь значение null в качестве значения элемента.

Ответ 2

Это обычно происходит, если вы пытаетесь создать XML файл с пробелами в любом из своих XElement/узлов. Убедитесь, что в Xml Node Names нет пробелов.

Пример:

Это приведет к ошибке, поскольку в " Номер учетной записи] XElement или node есть пробел, который не разрешен в 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 до " AccountNumber". Это сделано. Ищите пространства, если вы ошибочно создали. Надеюсь, это может помочь кому-то.

Ответ 3

Возможная причина для того же исключения для тех, кто добавил декоратор Description с пробелом, как и я, и столкнулся с этой ошибкой. Например:

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

при запуске:

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

у вас будет то же исключение.