0

Sql Query 正在返回以下 xml -

 <Table>
    <date>2014-01-15</date>
    <Life_x0020__x0026__x0020_Zeal>3</Life_x0020__x0026__x0020_Zeal>
    <Total>3</Total>
  </Table>

这里表中的列名是Life & Zeal但 xml 显示Life_x0020__x0026__x0020_Zeal

我参考了 MSDN,发现它是 UCS-2 编码。我正在从C#代码中读取这个 xml,我希望它解码回 Life & Zeal.

这个怎么做?

注意 - 我正在使用Sql Server 2008FOR XML PATH命令来生成这个 xml

4

3 回答 3

2

这与 UCS2 无关。

正如 Kami 指出的那样,带有非法字符的列名(对于 XML 节点名称)会使用它们的 Unicode 代码点等效项进行翻译,因此从技术上讲,您无法做您想做的事情。

我建议你在你的SELECT声明中添加一个别名

SELECT [Life & Zeal] AS LifeAndZeal

以避免在 XML 中出现这些字符。

于 2013-09-18T09:14:15.150 回答
1

更改编码的最简单方法是从 XML 文件(或流)中读取

using(XmlReader r = XmlReader.Create(new StreamReader(
                        fileName, Encoding.GetEncoding("UCS-2"))))
{
    while(r.Read())
    {
        Console.WriteLine(r.Value);
    }
}
于 2013-09-18T09:14:39.600 回答
1

在 XML 中,节点名称中不可能有SpaceAmpersand字符。我希望这就是它们在输出中被改变的原因。

无法更改代码以显示这些值。但是,您应该能够更改 SQL 以在输出中重命名它。

于 2013-09-18T09:09:42.820 回答