私の問題は、私は次のように二度同じ値を持つ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>
私の質問は、私はXMLファイルから重複する値を削除するためにXMLを使用する方法であります新しいXMLファイルで次の結果が得られます。チェックはIDに基づいて行うことができます。
<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:html>
私は、次のことを試してみました:
まずhereが見つかったとして、私は例を使用:
## SETUP ENVIRONMENT
# Find "Advanced Monitoring Agent" service and use path to locate files
$gfimaxagent = Get-WmiObject Win32_Service |
Where-Object { $_.Name -eq 'Advanced Monitoring Agent' }
$gfimaxexe = $gfimaxagent.PathName
$gfimaxpath = Split-Path $gfimaxagent.PathName.Replace([char]34,"") -Parent #"Wordpress syntax highlighter bug
$XmlFile = "C:\Users\Desktop\Test.xml"
$Output = "C:\Users\Desktop\result.xml"
[xml]$XmlContent = Get-Content $XmlFile
$XmlPath = "checks"
$Property = "uid"
$XmlValues = @{}
foreach ($XmlElement in $XmlContent.$XmlPath.ChildNodes)
{
$ElementValues = "" #"Wordpress syntax highlighter bug
foreach($XmlValue in $XmlElement.ChildNodes | Sort-Object name)
{
$ElementValues = $ElementValues + $XmlValue.Name + $XmlValue.InnerText
}
$XmlValues[$XmlElement.$Property] = $ElementValues
}
$XmlDuplicates = @{}
foreach ($XmlValue in $XmlValues.Values)
{
$Items = @($XmlValues.Keys | Where { $XmlValues[$_] -eq $XmlValue })
if ($Items.Count -gt 1)
{
if (!($XmlDuplicates[$Items[0]])) { $XmlDuplicates[$Items[0]] = $Items }
}
}
foreach ($XmlDuplicate in $XmlDuplicates.Keys)
{
for ($i = 1; $i -lt $XmlDuplicates[$XmlDuplicate].Count; $i++)
{
$XPath = "//" + $XmlPath + "/*[@" + $Property +"=" + $XmlDuplicates[$XmlDuplicate][$i]+"]"
$ChildToBeRemoved = $XmlContent.SelectSingleNode($XPath)
$ChildToBeRemoved.ParentNode.RemoveChild($ChildToBeRemoved)
}
}
$XmlContent.Save($Output)
問題は、私はそれはまだ私のファイルをロードしていないソースを変更した後もでしたサイトからの元のサンプルファイルです。
ように、第2のIは、以下のコードでそれを試してみました:
[xml]$XmlDocument1 = Get-Content -Path C:\Users\EX27740\Desktop\testdubbel.xml
$softwareVersionsArray = $catalogXML.catalog.software |
Group-Object name |
ForEach-Object {$_.Group[0]}
$filename = ' C:\Users\EX27740\Desktop\Resultaat.xml'
$catalogXML.Save($filename)
が、エラーを得る:
At line:8 Char:1 Cannot call a null-valued expression
ルートノードの例を提供できますか? –
他の人があなたのためにあなたの仕事をする場所ではありません。これまでに何を試しましたか(あなたのコードを見せてください)、あなたのコード内の*特定の*問題はあなたに助けが必要ですか? –
こんにちは申し訳ありませんがthodseを追加するためにそれらを今追加しました – Jarno343