PowerShell / Xpath:验证节点具有一组公共(但任意)的子节点

时间:2019-06-24 21:27:58

标签: xml powershell

给出此XML

<?xml version="1.0"?>
<Locations>
    <Location id = "Mac">
        <Rollouts>\\Mac\Rollouts</Rollouts>
        <Support>\\Mac\Px\Support</Support>
        <UnitTests>C:\Px_Tools_Unit_Tests</UnitTests>
        <FlexLMServer>Mac</FlexLMServer>
        <RSAccelerator>Mac</RSAccelerator>
    </Location>
    <Location id = "Px">
        <Rollouts>\\Px\Rollouts</Rollouts>
        <Support>\\Px\Support</Support>
        <UnitTests>C:\Px_Tools_Unit_Tests</UnitTests>
        <FlexLMServer>Px</FlexLMServer>
        <RSAccelerator>Px</RSAccelerator>
    </Location>
    <Location id = "Rotterdam">
        <Rollouts>\\Mac\Rollouts</Rollouts>
        <Support>\\Mac\Px\Support\Rotterdam</Support>
        <UnitTests>C:\Px_Tools_Unit_Tests</UnitTests>
        <FlexLMServer>Mac</FlexLMServer>
        <RSAccelerator>Mac</RSAccelerator>
    </Location>
    <Location id = "Berlin">
        <Rollouts>\\Px\Rollouts</Rollouts>
        <Support>\\Px\Support\Berlin</Support>
        <UnitTests>C:\Px_Tools_Unit_Tests</UnitTests>
        <FlexLMServer>Px</FlexLMServer>
        <RSAccelerator>Px</RSAccelerator>
    </Location>
</Locations>

我想验证所有“位置”节点都包含相同的子节点集。子节点的实际名称是可变的,数字也是可变的。我只想确保所有“位置”节点都具有相同的子节点。我还希望能够报告有用的错误消息。如果柏林缺少支持,我想说,如果鹿特丹有一个额外的垃圾节点,我想说。 我难过的是逻辑。我可以假设第一个是“正确的”,然后将所有内容进行比较。或者,我可以先获得一个计数,并假设最常发生的计数是正确的,并以其中之一为例。但是我怀疑可能还有更好的方法,此刻我很想念。也许将每个位置放入子节点名称的数组中,然后依次对每个位置进行比较对象,将错误写入另一个数组,然后首先检查是否已记录错误? 请注意,我仅验证子节点名称,而不验证InnerXML或顺序。 那么,有什么神奇的PowerShelly答案,还是我会对此一概而论(可能会因为我在第一个分支中效率低下而将其重写5次)?

0 个答案:

没有答案