2014-10-20 56 views
0
<nodes> 
    <node> 
    <nodeFullName>JohnSmith</nodefullname> 
    <nodeName>John</nodeName> 
    </node> 
    <node> 
    <nodeFullName>JohnSecond</nodefullname> 
    <nodeName>John</nodeName> 
    </node> 
</nodes> 

我想返回匹配多个条件选择节点的PowerShell版本2 XLST 1

  $XMLFILE.SelectNodes("//nodes/node[translate(nodeName,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')=""$Name"" and starts-with(nodeFullName,concat($Name,$LastName) ]") 

但是两个节点返回给定的名字和姓氏(不区分大小写)的节点上,第二个条件(之后和)没有检查,我错过了什么?

+0

' - 和'而不是和? – Paul 2014-10-20 22:16:00

+0

不是这是XSLT 1.0表示法,而不是powershell – CodeEmpower 2014-10-20 22:17:36

回答

2

在关闭过滤器之前,您不必关闭Start-With功能,只需关闭concact即可。该行的末尾应改为:

$Name,$LastName))]") 

相反的:

$Name,$LastName)]") 

这可能是简单的在PowerShell中加入姓和名事先而不是使用交流联系不过,恕我直言。

$FullName = $Name.tolower() + $LastName.tolower() 

然后你开始,有可以读取:

starts-with(translate(nodeFullName,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),""$FullName"")]") 

这里是我测试的全码:

$XMLFILE = [XML]@" 
<nodes> 
    <node> 
    <nodeFullName>JohnSmith</nodeFullName> 
    <nodeName>John</nodeName> 
    </node> 
    <node> 
    <nodeFullName>JohnSecond</nodeFullName> 
    <nodeName>John</nodeName> 
    </node> 
</nodes> 
"@ 
$Name = "John" 
$LastName = "SMITH" 
$FirstName = $Name.ToLower() 
$FullName = $Fname + $LastName.ToLower() 
$XMLFILE.SelectNodes("//nodes/node[translate(nodeName,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')=""$FName"" and starts-with(translate(nodeFullName,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),""$FullName"")]") 

这导致:

nodeFullName  nodeName 
------------  -------- 
JohnSmith   John