2014-10-20 54 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