从XML文件中删除重复标记

从XML文件中删除重复标记,xml,powershell,Xml,Powershell,我的问题是,我有一个XML文件,它具有两个相同的值,如: A. ANI-2016-05-02T21:01Z 2016-05-02T21:01:40 A2 5000 安尼 A. ANI-2016-05-02T21:01Z 2016-05-02T21:01:40 A2 5000 安尼 A. ANI-2016-08-04T21:01Z 2016-04-08T21:01:40 A2 5000 安尼 我的问题是如何使用XML从XML文件中删除重复值,以便在新的XML文件中得到以下结果。可以根据ID进行

我的问题是,我有一个XML文件,它具有两个相同的值,如:


A.
ANI-2016-05-02T21:01Z
2016-05-02T21:01:40
A2
5000
安尼
A.
ANI-2016-05-02T21:01Z
2016-05-02T21:01:40
A2
5000
安尼
A.
ANI-2016-08-04T21:01Z
2016-04-08T21:01:40
A2
5000
安尼
我的问题是如何使用XML从XML文件中删除重复值,以便在新的XML文件中得到以下结果。可以根据ID进行检查


A.
ANI-2016-05-02T21:01Z
2016-05-02T21:01:40
A2
5000
安尼
A.
ANI-2016-05-02T21:01Z
2016-05-02T21:01:40
A2
5000
安尼
我试过以下几件事:

首先,我使用了发现的示例:

##设置环境
#查找“高级监视代理”服务并使用路径查找文件
$gfimaxagent=获取WmiObject Win32\u服务|
其中对象{$\.Name-eq“高级监视代理”}
$gfimaxe=$gfimaxagent.PathName
$gfimaxpath=Split Path$gfimaxagent.PathName.Replace([char]34,”)-Parent#“Wordpress语法高亮错误
$XmlFile=“C:\Users\Desktop\Test.xml”
$Output=“C:\Users\Desktop\result.xml”
[xml]$XmlContent=获取内容$XmlFile
$XmlPath=“支票”
$Property=“uid”
$XmlValues=@{}
foreach($XmlContent.$XmlPath.ChildNodes中的xmlement)
{
$ElementValues=“#”Wordpress语法荧光笔错误
foreach($XmlElement.ChildNodes中的XmlValue |排序对象名称)
{
$ElementValues=$ElementValues+$XmlValue.Name+$XmlValue.InnerText
}
$XmlValues[$XmlElement.$Property]=$ElementValues
}
$XmlDuplicates=@{}
foreach($XmlValues.Values中的XmlValue)
{
$Items=@($XmlValues.Keys |其中{$XmlValues[$\]-eq$XmlValue})
如果($Items.Count-gt 1)
{
如果(!($XmlDuplicates[$Items[0]]){$XmlDuplicates[$Items[0]]]=$Items}
}
}
foreach($xmldeplicate in$xmldeplicates.Keys中的xmldeplicate)
{
对于($i=1;$i-lt$XmlDuplicates[$XmlDuplicate]。计数;$i++)
{
$XPath=“/”+$XmlPath+“/*[@”+$Property+“=”+$xmldicates[$xmldicate][$i]+“]
$ChildToBeRemoved=$XmlContent.SelectSingleNode($XPath)
$ChildToBeRemoved.ParentNode.RemoveChild($ChildToBeRemoved)
}
}
$XmlContent.Save($Output)
问题是,即使我更改了源代码,它仍然不会加载我的文件,而是从站点加载原始示例文件

第二步,我还尝试了以下代码:

[xml]$XmlDocument1=获取内容-路径C:\Users\EX27740\Desktop\testcallel.xml
$SoftwareVersionArray=$catalogXML.catalog.software|
组对象名称|
ForEach对象{$\.Group[0]}
$filename='C:\Users\EX27740\Desktop\Resultaat.xml'
$catalogXML.Save($filename)
但是得到一个错误:

在第8行,Char:1无法调用空值表达式


一种方法是循环遍历xml节点并删除任何重复项

[xml]$xml = @"
<ns:html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="2" release="1">
    <ns:Name>A
        <ns:ID>ANI-2016-05-02T21:01Z</ns:ID>
        <ns:CreationDate>2016-05-02T21:01:40</ns:CreationDate>
        <ns:Subname>A2
            <ns:Total>5000</ns:Total>
            <ns:type>ANI</ns:type>
        </ns:Subname>
    </ns:Name>

    <ns:Name>A
        <ns:ID>ANI-2016-05-02T21:01Z</ns:ID>
        <ns:CreationDate>2016-05-02T21:01:40</ns:CreationDate>
        <ns:Subname>A2
            <ns:Total>5000</ns:Total>
            <ns:type>ANI</ns:type>
        </ns:Subname>
    </ns:Name>

    <ns:Name>A
        <ns:ID>ANI-2016-08-04T21:01Z</ns:ID>
        <ns:CreationDate>2016-04-08T21:01:40</ns:CreationDate>
        <ns:Subname>A2
            <ns:Total>5000</ns:Total>
            <ns:type>ANI</ns:type>
        </ns:Subname>
    </ns:Name>
</ns:html>
"@

cls
$CreationDates=@()
$xml.html.Name | ForEach-Object {
  if($CreationDates -contains $_.CreationDate) {
    [void]$_.ParentNode.RemoveChild($_)
  } else {
    $CreationDates += $_.CreationDate
  }
}
#$CreationDates
$xml.html.Name
[xml]$xml=@”
A.
ANI-2016-05-02T21:01Z
2016-05-02T21:01:40
A2
5000
安尼
A.
ANI-2016-05-02T21:01Z
2016-05-02T21:01:40
A2
5000
安尼
A.
ANI-2016-08-04T21:01Z
2016-04-08T21:01:40
A2
5000
安尼
"@
cls
$CreationDates=@()
$xml.html.Name | ForEach对象{
if($CreationDates-包含$\ CreationDate){
[void]$\u.ParentNode.RemoveChild($\u)
}否则{
$CreationDate+=$\ CreationDate
}
}
#$CreationDates
$xml.html.Name

一种方法是循环遍历xml节点并删除任何重复项

[xml]$xml = @"
<ns:html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="2" release="1">
    <ns:Name>A
        <ns:ID>ANI-2016-05-02T21:01Z</ns:ID>
        <ns:CreationDate>2016-05-02T21:01:40</ns:CreationDate>
        <ns:Subname>A2
            <ns:Total>5000</ns:Total>
            <ns:type>ANI</ns:type>
        </ns:Subname>
    </ns:Name>

    <ns:Name>A
        <ns:ID>ANI-2016-05-02T21:01Z</ns:ID>
        <ns:CreationDate>2016-05-02T21:01:40</ns:CreationDate>
        <ns:Subname>A2
            <ns:Total>5000</ns:Total>
            <ns:type>ANI</ns:type>
        </ns:Subname>
    </ns:Name>

    <ns:Name>A
        <ns:ID>ANI-2016-08-04T21:01Z</ns:ID>
        <ns:CreationDate>2016-04-08T21:01:40</ns:CreationDate>
        <ns:Subname>A2
            <ns:Total>5000</ns:Total>
            <ns:type>ANI</ns:type>
        </ns:Subname>
    </ns:Name>
</ns:html>
"@

cls
$CreationDates=@()
$xml.html.Name | ForEach-Object {
  if($CreationDates -contains $_.CreationDate) {
    [void]$_.ParentNode.RemoveChild($_)
  } else {
    $CreationDates += $_.CreationDate
  }
}
#$CreationDates
$xml.html.Name
[xml]$xml=@”
A.
ANI-2016-05-02T21:01Z
2016-05-02T21:01:40
A2
5000
安尼
A.
ANI-2016-05-02T21:01Z
2016-05-02T21:01:40
A2
5000
安尼
A.
ANI-2016-08-04T21:01Z
2016-04-08T21:01:40
A2
5000
安尼
"@
cls
$CreationDates=@()
$xml.html.Name | ForEach对象{
if($CreationDates-包含$\ CreationDate){
[void]$\u.ParentNode.RemoveChild($\u)
}否则{
$CreationDate+=$\ CreationDate
}
}
#$CreationDates
$xml.html.Name

您能提供一个根节点的示例吗?因此,这里不是其他人为您工作的地方。到目前为止,您尝试了什么(显示您的代码),以及您需要帮助解决什么具体问题(在代码中)?您好,很抱歉,我现在添加了这些方法。您可以提供一个根节点示例吗?因此,这里不是其他人为您工作的地方。到目前为止,您尝试了什么(显示您的代码),以及您需要帮助解决哪些具体问题(代码中)?您好,很抱歉,我现在已经为您添加了这些方法。