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 );
у вас будет то же исключение.