Powershell:返回xml元素有困难

Powershell:返回xml元素有困难,xml,powershell,xpath,Xml,Powershell,Xpath,下面是一个xml文件的摘录 <JobList> <Job id="Hotel" start="2016-10-06" /> <Job id="Cleaning" start="2016-10-06" /> <Job id="Floor" start="2016-10-06" /> <Job id="Training" start="2016-10-06" /> <Job id="Meeting" sta

下面是一个xml文件的摘录

<JobList>
  <Job id="Hotel" start="2016-10-06" /> 
  <Job id="Cleaning" start="2016-10-06" /> 
  <Job id="Floor" start="2016-10-06" /> 
  <Job id="Training" start="2016-10-06" /> 
  <Job id="Meeting" start="2016-10-06" /> 
  <Job id="CI" start="2016-10-06" /> 
<Job titleId="Kitchen Associate" id="Kitchen" start="2016-10-06" rank="18">
但我似乎无法返回相关的开始日期,因为它将返回工作列表中的所有七个开始日期。有没有一种方法可以限制结果,使其只从同样存在titleID的地方获取


谢谢

代码的问题在于,您所采用的方法是面向从不同节点获取属性,而您应该获取正确的节点,然后选择其属性。您也可以通过XPath实现这一点:

(gc "e:\1.txt" -Raw | Select-Xml -XPATH "//Job[@titleId]/@start").Node
但这里有一个更强大的方法:

$xml = [xml] (gc e:\1.txt -Raw)
$node = $xml.JobList.Job | Where-Object { $_.titleId -ne $null }
$node.start
首先根据
标题ID
属性选择正确的节点,然后可以访问其所有属性


请记住,有可能会有超过1个或根本没有节点具有所需的
标题ID
,因此您需要检查
$node
是否为空以及有多少节点。

代码的问题是,您所采用的方法是面向从不同节点获取属性,何时应该获取正确的节点,然后选择其属性。您也可以通过XPath实现这一点:

(gc "e:\1.txt" -Raw | Select-Xml -XPATH "//Job[@titleId]/@start").Node
但这里有一个更强大的方法:

$xml = [xml] (gc e:\1.txt -Raw)
$node = $xml.JobList.Job | Where-Object { $_.titleId -ne $null }
$node.start
首先根据
标题ID
属性选择正确的节点,然后可以访问其所有属性

请记住,可能会有超过1个或根本没有节点具有所需的
标题ID
,因此需要检查
$node
是否为空以及有多少节点。

使用正确的XPath

Select-Xml -XPath '//Job[@titleId and @start]' | Select -expand titleId
使用正确的XPath

Select-Xml -XPath '//Job[@titleId and @start]' | Select -expand titleId

值可能会有所不同,因此我需要一个select而不是where子句。我是这样实现的,虽然它可能冗长,但我不是PS专家,也不是天生的开发人员:gc“\\path\fil.xml”| select xml-XPATH”//Job“| select-expandproperty node | select titleID,start | where{$\ path.titleID-ne$NULL}| Select-expandproperty title这确实是一个非常复杂的解决方案,请看我的更新值可能会有所不同,因此我需要一个Select而不是where子句。我是通过这种方式实现的,希望它可能冗长,但我不是PS专家,也不是天生的开发人员:gc“\\path\fil.xml”| Select xml-XPATH”//Job”| select-expandproperty节点| select titleID,start | where{$$\ titleID-ne$NULL}| select-expandproperty titleID这确实是一个非常复杂的解决方案,请参见我的更新