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 2008
和FOR XML PATH
命令来生成此xml
答案 0 :(得分:2)
这与UCS2无关。
正如Kami所指出的那样,具有非法字符(对于XML节点名称)的列名称将使用其Unicode代码点等效项进行转换,因此从技术上讲,您无法执行您想要执行的操作。
我建议您在SELECT
声明中添加别名
SELECT [Life & Zeal] AS LifeAndZeal
避免使用XML中的这些字符。
答案 1 :(得分:1)
在XML中,节点名称中不可能包含Space
或Ampersand
个字符。我希望这就是他们在输出中被改变的原因。
无法更改代码以显示这些值。但是,您应该能够更改SQL以在输出中重命名它。
答案 2 :(得分:1)
更改编码的最简单方法是从XML文件(或流)中读取
using(XmlReader r = XmlReader.Create(new StreamReader(
fileName, Encoding.GetEncoding("UCS-2"))))
{
while(r.Read())
{
Console.WriteLine(r.Value);
}
}