Удалить элементы из XML - PullRequest
       4

Удалить элементы из XML

2 голосов
/ 08 декабря 2010

У меня есть XML в следующем формате:

<policy_groups>
    <policy_group>
    <policygroup_name>Application Server with IIS</policygroup_name>
        <policygroup_id>38</policygroup_id>
        <policygroup_description />
        <policygroup_creatorname>VMW2K3-SSI10-KF\VMW2K3-SSI10-KF\Administrator</policygroup_creatorname>
        <policygroup_patchgroup>-1</policygroup_patchgroup>
        <policygroup_signaturegroup>-1</policygroup_signaturegroup>
        <policygroup_system>false</policygroup_system>
        <policygroup_item>
            <policygroupitem_id>83217</policygroupitem_id>
            <policygroupitem_name>.NET Framework Support Service Status</policygroupitem_name>
            <policygroupitem_type>0</policygroupitem_type>
            <policygroupitem_policygroupid>38</policygroupitem_policygroupid>
            <policygroupitem_productname>Windows Server 2003, Standard Edition</policygroupitem_productname>
            <policygroupitem_spname>Gold</policygroupitem_spname>
            <policygroupitem_checkshavlikid>207</policygroupitem_checkshavlikid>
            <policygroupitem_value>Disabled-Not Found</policygroupitem_value>
            <policygroupitem_operator>=</policygroupitem_operator>
            <policygroupitem_displayvalue>Not Installed</policygroupitem_displayvalue>
        </policygroup_item>
        <policygroup_item>
            <policygroupitem_id>85541</policygroupitem_id>
            <policygroupitem_name>.NET Framework Support Service Status</policygroupitem_name>
            <policygroupitem_type>0</policygroupitem_type>
            <policygroupitem_policygroupid>38</policygroupitem_policygroupid>
            <policygroupitem_productname>Windows Server 2003, Standard Edition</policygroupitem_productname>
            <policygroupitem_spname>SP1</policygroupitem_spname>
            <policygroupitem_checkshavlikid>207</policygroupitem_checkshavlikid>
            <policygroupitem_value>Disabled-Not Found</policygroupitem_value>
            <policygroupitem_operator>=</policygroupitem_operator>
            <policygroupitem_displayvalue>Not Installed</policygroupitem_displayvalue>
        </policygroup_item>
    </policy_group>
    </policy_groups>

За исключением тысяч <policygroup_item> в документе XML.

Мне нужно удалить все policygroup_item, где <policygroupitem_productname> и <policygroupitem_spname> не соответствуют ни одной из следующих комбинаций:

  • Windows 2000 Advanced Server SP4
  • Windows 2003 Enterprise Edition SP2
  • Windows 2003 Enterprise Edition (x64) SP2
  • Windows 2003 R2 Enterprise Edition SP2
  • Windows 2003 R2 Enterprise Edition (x64) SP2
  • Windows 2008 Enterprise Edition SP2
  • Windows 2008 Enterprise Edition (x64) SP2
  • Windows 2008 Standard Edition SP2
  • Windows 2008 R2 Standard (x64) Gold
  • Windows 2008 R2 Enterprise (x64) Gold

Есть ли способ сделать это с помощью XSLT или powershell?Или может VB скрипт?

Спасибо

Брэд

1 Ответ

1 голос
/ 08 декабря 2010

Не думайте, что вы удаляете те, которые не совпадают, думайте, что вы копируете те, которые не совпадают.Используйте элемент <xsl:copy-of> для выбора всех тегов, которые вы хотите сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...