我正在使用XML数据存储区来获取一个工具,该工具部分地用于修改INI文件。为此,我有一些看起来像这样的XML ......
<ManageINI>
<Target>Target.ini</Target>
<ReviseKey>
<Section>Section</Section>
<Name>Name</Name>
<Value>Value</Value>
</ReviseKey>
</ManageINI>
当然这是有问题的,因为ReviseKey.Name是该节点的名称,它与子节点冲突。当然,更好的答案是使用<KeyName>
和<KeyValue>
。
我现在要做的是寻找&#39;姓名&#39;键和标记它们在日志中需要修订。但是,我到目前为止根本无法访问它们。我曾想过$ node。&#39; name&#39; vs $ node.name可能会让我在那里,但没有。
所以,问题是,是否有某种方法可以强制使用基于XPath的方法来查看这些Name节点,以便我可以标记它们,或者让我自己挖出一个我可以在代码中真正脱离的正确的深洞?
编辑: 那么,我会使用它来设置这样的变量然后迭代该变量中的节点吗?
$invalid = $global:schemaXml.selectNodes("//ReviseKey[Name='Name']")
编辑:看来事情会变得更加混乱。我有很多&#34;任务&#34;节点,我正在一个已作为[Xml.XmlElement]$task
传递的节点上逐个进行验证。如果我只测试$ task.Name之类的东西,那么我将得到整个任务的名称,而不是无效的Task.Name节点。我还尝试了$testnode = $task.selectSingleNode("/$($node.name)/$($childNode.invalid)")
,其中$ childNode.invalid是&#34;名称&#34;在这种情况下,我正在测试一个子节点条件,但在这里,我似乎得到了基于整个XML的XPath,而不仅仅是相关任务节点中的部分。
那么,是否可以针对XmlElement运行XPath?或者是否有机制在$ task变量上使用点表示法并将其限制为节点而不是属性?