我有一些xml文件具有不同的元素。我想寫一些代碼在C#或PowerShell中遍歷每個元素並獲取值。 我希望它足夠通用,以便我可以將它與其他xml文件一起使用。所有xml文件都具有相同的格式,但元素的名稱延遲。使用PowerShell遍歷xml元素
非常感謝您的幫助。
<root>
<list>
<FirstName>Abc</FirstName>
<LastName>LT</LastName>
<Occupatoin>Eng</Occupation>
<BirthDate></BirthDate>
...
</list>
</root>
----------------------
XML file 2
<root>
<Trainings>
<Java>Ab</Java>
<NET>b</NET>
<SQL>c</SQL>
<Powershell>d</Powershell>
...
</Trainings>
</root>
另一個XML已經引入了將用於上述XML文件元素的迭代中的鹼。
<root>
<Element Name="Firstname />
<Element Name="Lastname" />
<Element Name="Occupation" />
<Element Name="Java" />
<Element Name="Net" />
...
</root>
[System.Xml.XmlDocument] $xdLists = new-object System.Xml.XmlDocument
[System.Xml.XmlDocument] $xdMig = new-object System.Xml.XmlDocument
$listfile = "C:\PowershellFiles\XmlLists.xml"
$xdLists.load($listfile)
$xdNodes= $xdLists.selectnodes("//DestinationLists/DestinationList")
$migCols = $xdLists.selectnodes("//MigrationColumns/Columns/Column")
#LOOP 1-----------------------------------------
foreach($xnode in $xdNodes)
{
Write-Host $xnode.Attributes.GetNamedItem("MigrationFile").Value
$destLists = $xnode.Attributes.GetNamedItem("Name").Value
$migfiles = $xnode.Attributes.GetNamedItem("MigrationFile").Value
Write-Host $destLists
#Check if the xml file to read from exists
if($migFiles -ne $null)
{
$xdMig.Load($migfiles)
$spSite = Get-SPSite "http://sp2010:100"
$spWeb = $spSite.OpenWeb()
$list = $spWeb.Lists[$destLists]
foreach($nCol in $migCols)
{
$destListCol = $nCol.Attributes.GetNamedItem("DestList").Value
$sourcCol = $nCol.Attributes.GetNamedItem("SourceCol").Value
# Write-Host $col " - " $list.Title
if($destListCol -eq $list.Title)
{
Write-Host $destListCol " - " $list.Title " - Source Column: " $sourcCol -ForegroundColor Green
Write-Host
# ----------------------- time to search the exported lists --------------------
Write-Host "Search the exported list for the right column" -ForegroundColor DarkYellow
if($xdMig.DocumentElement -ne $null)
{
$xnList = $xdMig.DocumentElement.ChildNodes
# LOOP 2----------------------------------------
Write-Host $xnList.Count " items found" -ForegroundColor Red
foreach($xn in $xnList)
{
Write-Host $xn.Name -ForegroundColor Red
$nList = $xdMig.SelectNodes("//"+$xn.Name)
$lItem = $list.Items.Add()
foreach($n in $migCols)
{
if($n.Attributes -ne $null)
{
$sourceCol = $n.Attributes.GetNamedItem("SourceCol").Value
$destCol = $n.Attributes.GetNamedItem("DestCol").Value
$destList = $n.Attributes.GetNamedItem("DestList").Value
Write-Host "Dest Col: " $destCol "- Sour Col: " $xn[$sourceCol].Name
Write-Host $destList -ForegroundColor Red
if($list.Title -eq $destList)
{
if($xn[$sourceCol] -ne $null)
{
if($list.Fields[$destCol] -ne $null)
{
$lItem[$destCol] = $xn[$sourceCol].InnerText
}
}else
{
Write-Host $sourceCol " was not matched" -ForegroundColor Yellow
}
}
}
}
$lItem.Update()
Write-Host "-----------------------------------"
}
}
}
}
}
}
http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts – Kiquenet 2013-03-06 10:01:03