我必须通过查询充满xpath条目的数据库来构建XML文件 (ms sql)描述一些配置值(格式不可更改)
e.g。 3列,varchar
Path Attribute Value
/configuration/options/startup showSplash 1
/configuration/settings idletime 1400
/configuration/options/defaults maxWindows 5
我开始将一个xml与c#代码放在一起, mergin重叠pathes 但后来考虑用sql做这个。
<configuration>
<options>
<startup showSplash="1" />
<defaults maxWindows="1" />
</options>
<settings idletime="1400" />
</configuration>
这可能吗 - 我在任何地方都找不到类似的东西
答案 0 :(得分:0)
您可以从原始表创建一个选择列表,该列表可以连接到动态选择语句中,最后用sp_sqlexec执行。
我试过这样的事情。
DECLARE @strPaths VARCHAR(MAX)
DECLARE @sqlString NVARCHAR(MAX)
SELECT
@strPaths
=
STUFF(
(
SELECT
', ' + Value + ' [' + SUBSTRING([Path], 2, LEN([Path]) - 1) + '/@' + Attribute + ']'
FROM yourTable
ORDER BY [Path]
FOR XML PATH('')
)
,1,2,''
)
SET @sqlString = 'SELECT (SELECT ' + @strPaths + ' FOR XML PATH(''''), TYPE) [XML]'
EXEC sp_sqlexec @sqlString
返回您要查找的确切XML
<configuration>
<options>
<defaults maxWindows="5" />
<startup showSplash="1" />
</options>
<settings idletime="1400" />
</configuration>
但如果我拿出'ORDER BY [Path]'。生成的XML完全不同。
<configuration>
<options>
<startup showSplash="1" />
</options>
<settings idletime="1400" />
<options>
<defaults maxWindows="5" />
</options>
</configuration>
所以你必须确定路径的顺序才能使用这样的解决方案。
总之:只有你有订购标准才能做到。