Powershell和XPath提取节点的字符串表示形式

时间:2018-07-16 12:52:54

标签: xml powershell xpath

使用XPath是否可以重建节点的原始XML文本?

使用SelectSingleNode在变量中提供此XML

<Rule scope="node" note="Location">
   <Property>location</Property> 
   <Operator>-eq</Operator>
   <Value>Px</Value>
</Rule>

例如,我可以使用$variable.scope$variable.property来获取属性和子节点的值。但是,当我验证XML(例如,范围的有效值)时,我想提供一个错误日志,显示与文件中的XML完全相同的XML。所以,这完全是一个字符串

<Rule scope="badNode" note="Location">

我可以重建它,但是由于属性可以是任意顺序,因此我可能无法像实际找到的那样重建它。因此,我希望有一些机制可以获取原始字符串,而无需分别将XML文件重新解析为字符串并进行搜索

1 个答案:

答案 0 :(得分:0)

您可以获取OuterXml字符串表示形式,并仅删除第一个>之后的所有内容:

$validScopes = 'node','superNode'

$RuleNodes = $xml.SelectNodes('//Rule')

foreach($node in $RuleNodes){
    if($node.GetAttribute('scope') -notin $validScopes){
        $faultyNode = $node.OuterXml -replace '\>.*$','>'
        Write-Error "Faulty node found: $faultyNode"
    }
}