如何使用powershell在xml文件中使用通配符

如何使用powershell在xml文件中使用通配符,powershell,Powershell,我希望它返回属性以“\u FG”结尾的所有节点。但是如果我写下整个名称([@name='AKG\u PP\u GY\u FG']),它似乎不起作用,它会返回节点。为什么通配符在这种情况下不起作用?您可以尝试使用$=或结束符(),但由于您使用的是PowerShell,这可能不起作用,因为PowerShell仍然使用XPath 1.0: XPath 2.0、3.0 $xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[

我希望它返回属性以“\u FG”结尾的所有节点。但是如果我写下整个名称([@name='AKG\u PP\u GY\u FG']),它似乎不起作用,它会返回节点。为什么通配符在这种情况下不起作用?

您可以尝试使用
$=
结束符()
,但由于您使用的是PowerShell,这可能不起作用,因为PowerShell仍然使用XPath 1.0:

XPath 2.0、3.0

$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[@NAME='*_FG']")
$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[ends-with(@NAME,'_FG')]")
对于XPath 1.0(PowerShell),请使用:

XPath 1.0

$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[@NAME='*_FG']")
$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[ends-with(@NAME,'_FG')]")

\u FG
可以出现在字符串中的任何位置时,您可以使用XPath 1.0中也支持的
contains()
您可以尝试
$=
ends-with()
,但由于您使用的是PowerShell,这可能不起作用,因为PowerShell仍然使用XPath 1.0:

XPath 2.0、3.0

$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[@NAME='*_FG']")
$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[ends-with(@NAME,'_FG')]")
对于XPath 1.0(PowerShell),请使用:

XPath 1.0

$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[@NAME='*_FG']")
$xml.selectnodes("/POWERMART/REPOSITORY/FOLDER//TRANSFORMFIELD[ends-with(@NAME,'_FG')]")

\u FG
可以出现在字符串中的任何位置时,可以使用
contains()
XPath 1.0中也支持它

$=不起作用,我不想使用结尾,因为有时_DT可能出现在开头或中间$=不起作用,我不想使用结尾,因为有时_DT可能出现在开头或中间