使用PowerShell将SQL查询结果导出为XML格式

时间:2012-08-17 21:35:07

标签: sql xml powershell

我需要根据我使用PowerShell运行的SQL查询创建一个XML文件。我已经知道我需要创建的XML模式。需要循环查询结果,并且我希望根据模式将每个数据值添加到特定的XML节点。

我能够运行查询并获得我需要的结果,但是按照规定的格式放置数据时遇到了问题。

以下是我试图完成此任务的示例:

**解析XMl模板

$ XmlTemplate = [xml](get-content $ xml)($ xml是我从客户端获得的架构)

***解析XML模板并跳转到标记

$ PlanIDXML = $ XmlTemplate.NpiLink.PlanProvider.PlanID(到达我需要输入数据的节点)

**解析XML模板并跳转到标记

$ PlannameXML = $ XmlTemplate.NpiLink.PlanProvider.PlanName(进入我需要输入数据的节点)

样品qry; 从计划中选择PlanID,PlanName

**假设我运行了查询并将结果保存为$ qryresults ***

foreach($结果$ qryresults) {

$ PlanID = $ result.PlanID $ PlanName = $ result.PlanName

**克隆

$ NewPlanIDXML = $ PlanIDXML.Clone()

**对数据进行更改

$ NewPlanIDXML = $ PlanID

***追加

$ PlanIDXML.AppendChild($ NewPlanIDXML)

*为计划名称**做同样的事情

$ PlanNameXML = $ result.PlanName

} $ XmlTemplate.Save( '文件路径')

我担心的是,我需要为查询结果中的每个计划或计划执行此操作,并且我需要继续生成标记和标记,并将它们附加到原始节点并保存模式。

因此,如果我的查询结果有10个计划ID,则应继续生成新的计划ID标记和计划名称标记。

它不允许我追加(因为system.string无法转换为system.xml)。我真的很困难,如果你有更好的方法来解决这个问题,我很满意。

提前多多谢谢!!!

1 个答案:

答案 0 :(得分:0)

你可能会过度设计这一点。如果您有XML节点的模板,只需将其视为字符串,在适当的位置弹出您的值。生成这些节点的一些数组作为字符串,然后将它们连接在一起并保存到磁盘。

假设你的模板看起来像这样(在生成值应该去的地方输入一些标记):

--Template.xml---
<Node attr="##VALUE1##">
  <Param>##VALUE2##</Param>
</Node>

你想运行一些查询来生成一堆这些节点,填入VALUE1和VALUE2。那么类似的东西可以起作用:

$template = (gc .\Template.xml) -join "`r`n"
$val1Token = '##VALUE1##'
$val2Token = '##VALUE2##'

$nodes = foreach( $item in Run-Query)
{
   # simple string replace
   $result = $template
   $result = $result.Replace($val1Token, $item.Value1)
   $result = $result.Replace($val2Token, $item.Value2)
   $result
}

# you have all nodes in a string array, just join them together along with parent node
$newXml = (@("<Nodes>") + $nodes + "</Nodes>") -join "`r`n"

$newXml | out-file .\Results.xml