如何使用PowerShell读取XML中单条记录ID生成合法请求URL
PowerShell 逐行获取XML节点ID生成请求URL的解决方案
你直接调用节点集合的.Id属性时,PowerShell会默认返回所有子节点的Id属性组成的数组,因此需要先获取所有记录节点的集合,再循环遍历每个节点单独提取ID即可。
完整修改后代码
$base64AuthInfo = "###" $Header = @{ Authorization = "Basic $base64AuthInfo" } # 原双引号内的$format会被解析为PowerShell变量,改用单引号避免解析错误 $url = 'http://###/?$format=xml' $data = Invoke-WebRequest -Uri $url -Headers $Header -Method Get -ContentType "application/xml" $xml = [xml]$data.Content # 强转为数组,避免仅返回单条记录时无法正常遍历 $recordNodes = @($xml.ChildNodes.Body.ChildNodes.Body) # 遍历每一条记录节点 foreach ($node in $recordNodes) { $id = $node.Id # 按照要求的格式拼接URL,$符号加反引号转义避免被解析 $customValuesURL = "http://example.com/1/2/3/$id/?`$format=xml" $values = Invoke-WebRequest -Uri $customValuesURL -Headers $Header -Method Get -ContentType "application/xml" $customValues = [xml]$values.Content $fieldNode = $customValues.FirstChild.Body.CustomValues.CustomFieldValue $resultObject = New-Object PSObject -Property @{ RecordId = $id Name = $fieldNode.Name DataType = $fieldNode.DataType Value = $fieldNode.Value } Write-Output $resultObject }
关键调整说明
- 使用
@()语法将获取到的节点集合强转为数组,解决单条记录时返回对象不是集合、无法遍历的问题 - 新增
foreach循环遍历每个记录节点,每次循环仅提取当前节点的ID生成请求URL,保证每次请求的URL合法 - 修正了URL拼接时
$format参数被PowerShell误解析为变量的问题,可通过反引号转义或者单引号包裹固定参数部分解决 - 按照你给出的目标URL格式补全了路径中的
/1/2/3/部分,实际使用时如果路径有差异可以自行调整
内容的提问来源于stack exchange,提问作者Robert Gething
相关产品推荐
相关产品推荐

