0

我需要根据我使用 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; 从计划中选择计划 ID、计划名称

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

foreach($qryresults 中的$result) {

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

**制作克隆

$NewPlanIDXML=$PlanIDXML.Clone()

**对数据进行更改

$NewPlanIDXML=$PlanID

***附加

$PlanIDXML.AppendChild($NewPlanIDXML)

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

$PlanNameXML=$result.PlanName

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

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

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

它不允许我追加(因为 system.string 无法转换为 system.xml)。我真的被困住了,如果你有更好的方法来处理这个问题,我会全力以赴。

提前非常感谢!!!

4

1 回答 1

2

您可能对此进行了过度设计。如果您有 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
于 2012-08-18T00:53:56.873 回答