无法在读取XML时转换特殊字符

时间:2015-01-19 14:26:47

标签: c# xml

我使用以下代码将XML导入数据集:

DataSet dataSet = new DataSet();
dataSet.ReadXml(file.FullName);
if (dataSet.Tables.Count > 0) //not empty XML file
{
    da.ClearFieldsForInsert();
    DataRow order = dataSet.Tables["Orders"].Rows[0];
    da.AddStringForInsert("ProductDescription", order["ProductDescription"].ToString());
}

'等特殊字符未按照我原先的想法转换为'

我可以在代码中自行转换它们,但我们认为ReadXML方法应该自动执行。

我在这里错过了什么吗?

编辑:

XML文件的相关行:

 <ProductDescription>Grey &apos;Aberdeen&apos; double wardrobe</ProductDescription>

编辑:

然后我尝试使用XElement

XDocument doc = XDocument.Load(file.FullName);
XElement order = doc.Root.Elements("Orders").FirstOrDefault();

...

if (order != null)
{
    da.ClearFieldsForInsert();
    IEnumerable<XElement> items = doc.Root.Elements("Orders");

    foreach (XElement item in items)
    {
        da.ClearFieldsForInsert();
        da.AddStringForInsert("ProductDescription", item.Element("ProductDescription").value.ToString());

    }

仍未转换!

1 个答案:

答案 0 :(得分:1)

如上所述here&apos;是有效的XML转义码。

但是,没有必要在元素值中转义'

<ProductDescription>Grey 'Aberdeen' double wardrobe</ProductDescription>

是有效的XML。

除了解决方法之外,符合标准的XML解析器应该遵守预定义的实体,无论它们出现在哪里(CDATA除外)。

文档中记录了Data.ReadXml的这种脆弱性和偏离标准XML解析的偏差。我引用:

  

DataSet 本身只能逃脱非法行为   XML元素名称中的XML字符因此只能使用   相同。当转义XML元素名称中的合法字符时,   处理时忽略元素。


由于其局限性,我不会使用DataTable.ReadXml进行XML解析。相反,您可以使用XDocument这样的东西,

using System.Xml.Linq;

...

var doc = XDocument.Load(file.FullName);
var order in doc.Root.Elements("Order").FirstOrDefault();
if (order != null)
{
    da.ClearFieldsForInsert();
    var productDescription = order.Element("ProductDescription");
    da.AddStringForInsert(
        "ProductDescription",
        productDescription.Value);
}