Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Powershell从XML循环和读取所有必需的属性值_Xml_Powershell_Foreach - Fatal编程技术网

如何使用Powershell从XML循环和读取所有必需的属性值

如何使用Powershell从XML循环和读取所有必需的属性值,xml,powershell,foreach,Xml,Powershell,Foreach,我在文件“Test1.XML”中有以下XML数据: 来源=开发;Catalog=DEV_DMT;综合安全=SSPI; 来源=实验室;目录=TST_INT10;综合安全=SSPI; 来源=LAB1;目录=TST_INT1;综合安全=SSPI; 来源=LAB10;目录=TST_INT12;综合安全=SSPI; 发展 INT10 INT1 INT15 我希望循环遍历所有属性,并通过传递需要检索的参数,使用PowerShell检索数据 例如:如果我将变量值作为INT10传递,我只需要以下值: Nam

我在文件“Test1.XML”中有以下XML数据:


来源=开发;Catalog=DEV_DMT;综合安全=SSPI;
来源=实验室;目录=TST_INT10;综合安全=SSPI;
来源=LAB1;目录=TST_INT1;综合安全=SSPI;
来源=LAB10;目录=TST_INT12;综合安全=SSPI;
发展
INT10
INT1
INT15
我希望循环遍历所有属性,并通过传递需要检索的参数,使用PowerShell检索数据

例如:如果我将变量值作为INT10传递,我只需要以下值:

Name Value ---- ----- Value1 LAB Environment INT10
$child = 'INT10'
$XmlDocument.SelectNodes("//TextValues[./${child}]") | ForEach-Object {
    New-Object -Type PSObject -Property @{
        'Name'  = $_.Name
        'Value' = $_.$child
    }
} | Select-Object Name, Value
但是XML标记可能会根据文件每次增加或减少。我需要循环使用现有数据并得到结果


我不知道如何使用
foreach
读取文件中的所有值。

您只需通过管道将
TextValues
传输到
选择对象
,并指定您想要值的属性名称:

[xml]$XmlDocument = Get-Content D:\Roshan\Test1.xml

$XmlDocument.TextValuess.TextValues | Select-Object Name, INT10

您只需通过管道将
TextValues
传输到
Select Object
,并指定您想要的属性名称:

[xml]$XmlDocument = Get-Content D:\Roshan\Test1.xml

$XmlDocument.TextValuess.TextValues | Select-Object Name, INT10

从XML结构中选择数据的最通用的方法是。在你的情况下,你会这样做:

Name Value ---- ----- Value1 LAB Environment INT10
$child = 'INT10'
$XmlDocument.SelectNodes("//TextValues[./${child}]") | ForEach-Object {
    New-Object -Type PSObject -Property @{
        'Name'  = $_.Name
        'Value' = $_.$child
    }
} | Select-Object Name, Value
如果希望从子节点提取部分信息,则需要指定如何完成。例如:

($_.$child -split ';')[0] -replace '^Source='

从XML结构中选择数据的最通用的方法是。在你的情况下,你会这样做:

Name Value ---- ----- Value1 LAB Environment INT10
$child = 'INT10'
$XmlDocument.SelectNodes("//TextValues[./${child}]") | ForEach-Object {
    New-Object -Type PSObject -Property @{
        'Name'  = $_.Name
        'Value' = $_.$child
    }
} | Select-Object Name, Value
如果希望从子节点提取部分信息,则需要指定如何完成。例如:

($_.$child -split ';')[0] -replace '^Source='

这是为了得到期望的结果。由于Ansger quirey对我的需求非常方便,我选择了它作为解决方案。这是为了得到期望的结果。由于Ansger quirey对我的要求非常方便,我选择了它作为解决方案。您能否帮助我如何为每次读取在ForEach中为变量赋值。需要类似这样的$child='INT10'$XmlDocument.SelectNodes(“//TextValues[./${child}]”)ForEach对象{New Object-Type PSObject-Property@{$Name=$\\ Name$Value=$.$child}}}选择对象名称,值您还可以帮助我如何为每次读取为ForEach中的变量赋值。需要类似这样的$child='INT10'$XmlDocument.SelectNodes(“//TextValues[./${child}]”)| ForEach对象{New Object-Type PSObject-Property@{$Name=$\\ Name$Value=$.$child}}}选择对象名,值