如何使用Powershell从以下XML获取assignee标记的值
XML: 输出为空(null) 如何获取受让人id(John Doe)的值 我也试过以下方法,都不返回任何结果如何使用Powershell从以下XML获取assignee标记的值,xml,powershell,selectnodes,Xml,Powershell,Selectnodes,XML: 输出为空(null) 如何获取受让人id(John Doe)的值 我也试过以下方法,都不返回任何结果 $singleAssignee = $MyXML.SelectNodes('//work-item/field[@id="assignee"]') write ("`t" + $singleAssignee.InnerText) @SteveGray说,一旦我修复了XML,代码就可以为我工作了。在您的示例中,最后一个元素没有使用标记关闭。如果该错误也存在于实际的XML中,并且在分配
$singleAssignee = $MyXML.SelectNodes('//work-item/field[@id="assignee"]')
write ("`t" + $singleAssignee.InnerText)
@SteveGray说,一旦我修复了XML,代码就可以为我工作了。在您的示例中,最后一个
元素没有使用
标记关闭。如果该错误也存在于实际的XML中,并且在分配$MyXML时没有捕捉到错误,那么这可能就是实际问题所在?
另外,您使用的是SelectNodes,因此$singleAssignee
可能不是那么单一。这可能会让你更靠近一点
#$singleAssignee = $MyXML.work-item.field.assignee
#$singleAssignee = Select-XML -xml $MyXML -xpath "//work-item/field/@assignee"
您是否将
$MyXml
声明为类型[xml]
?
如果是,则$singleassignment.InnerText
或$singleassignment.\text'
将为您提供字段“John Doe”的值:
$assignees = $MyXML.SelectNodes('//work-item/field[@id="assignee"]')
foreach ($assignee in $assignees) {
write ("`t$($assignee.InnerText)")
}
#使用xml作为此处字符串
[xml]$MyXml=@”
无名氏
管理
2019-06-05 10:03:38.763 -0400
"@
#或者,如果xml位于文件中,则使用
#[xml]$MyXml=Get Content-Path'D:\test.xml'-raw#''
$singleAssignee=$MyXML.SelectNodes(“//工作项/字段[@id=“assignee”]”)
$SingleAssignment.#文本'
对不起,我遗漏了很多XML。该字段在我的文件中已正确关闭。我添加了foreach,它可以正常工作。我猜这意味着selectNodes返回一个列表,无论列表中有多少元素,您都必须遍历该列表。是的,使用selectNodes可以获得一个数组,可能只有一个项目。数组在.InnerText属性中没有任何内容,但由于PowerShell的工作方式,它也不会在那里抛出错误。这和被污染的管道问题确实很难追踪。是的,我没有包括整个Powershell脚本,我尝试了InnerText和“#text”。当我将write语句放入foreach循环时,一切都按预期进行。
$assignees = $MyXML.SelectNodes('//work-item/field[@id="assignee"]')
foreach ($assignee in $assignees) {
write ("`t$($assignee.InnerText)")
}
# using the xml as here-string
[xml]$MyXml = @"
<?xml version="1.0" encoding="UTF-8"?>
<work-item>
<field id="assignee">John Doe</field>
<field id="author">admin</field>
<field id="created">2019-06-05 10:03:38.763 -0400</field>
<field id="description" text-type="text/plain"></field>
</work-item>
"@
# or if the xml is in a file, use
# [xml]$MyXml = Get-Content -Path 'D:\test.xml' -raw # '<THE XML FILE>'
$singleAssignee = $MyXML.SelectNodes('//work-item/field[@id="assignee"]')
$singleAssignee.'#text'