【发布时间】:2011-04-08 17:44:52
【问题描述】:
我们正在使用货币兑换服务。 xml web 响应不是最好的格式。好像是这样的
<RESPONSE>
<EXPR>USD</EXPR>
<EXCH>CAD</EXCH>
<AMOUNT>1</AMOUNT>
<NPRICES>1</NPRICES>
<CONVERSION>
<DATE>Thu, 07 Apr 2011 21:00:00 GMT</DATE>
<ASK>1.0418</ASK>
<BID>1.0415</BID>
</CONVERSION>
<EXPR>USD</EXPR>
<EXCH>AUD</EXCH>
<AMOUNT>1</AMOUNT>
<NPRICES>1</NPRICES>
<CONVERSION>
<DATE>Thu, 07 Apr 2011 21:00:00 GMT</DATE>
<ASK>1.0461</ASK>
<BID>1.0459</BID>
</CONVERSION>
</RESPONSE>
于是我试着写了下面的SQL语句
SELECT
T.c.value('../EXPR[1]', 'VARCHAR(3)')
, T.c.value('../EXCH[1]', 'VARCHAR(3)')
, T.c.value('ASK[1]', 'MONEY')
FROM @xml.nodes('/RESPONSE/CONVERSION') T(c)
但是由于两个标头(EXPR 和 EXCH)都在同一级别,所以无论如何我可以选择转换上方的 Expr。 并且无需在 C# 中读取为文本文件。 我明白我将如何做到这一点。
【问题讨论】:
-
哇!任何想出这种回复格式的人都应该被送回学校。
-
您是否也尝试在 SQL 中完成这一切?
-
您在寻找 SQL 或 C# 的答案吗?如果您不是在寻找 C# 答案,则可能需要删除该标签。
-
@Bala R - 同意 - 那些日期表示是残酷的。它们是特定于文化的 - 绝不是一个好主意。
-
我可以在 C# 或 Sql 中执行此操作,因为无论如何我都是在 c# 程序中进行网络调用。同样,我有一个文本阅读器解决方案,但不知道它是否是最好的。我也在考虑使用@xml.modify 来尝试插入所需的级别。