使用Powershell将具有名称空间的XML转换为CSV [英] Converting XML with namespaces to CSV using powershell
本文介绍了使用Powershell将具有名称空间的XML转换为CSV的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这个XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:BOX xmlns="urn:loc.gov:item"
xmlns:ns2="urn:loc.gov:box"
xmlns:ns3="http://www.example.com/inverter"
xmlns:ns4="urn:loc.gov:xyz">
<ns3:Item>
<Description>ITEM1</Description>
<PackSizeNumeric>6</PackSizeNumeric>
<ns2:BuyersItemIdentification>
<ID>75847589</ID>
</ns2:BuyersItemIdentification>
<ns2:CommodityClassification>
<CommodityCode>856952</CommodityCode>
</ns2:CommodityClassification>
<ns2:AdditionalItemProperty>
<Name>Weight</Name>
<Value>0</Value>
</ns2:AdditionalItemProperty>
<ns2:AdditionalItemProperty>
<Name>Tare</Name>
<Value>0</Value>
</ns2:AdditionalItemProperty>
<ns2:ManufacturerParty>
<ns2:PartyIdentification>
<ID>847532</ID>
</ns2:PartyIdentification>
</ns2:ManufacturerParty>
</ns3:Item>
<ns3:Item>
<Description>ITEM2</Description>
<PackSizeNumeric>10</PackSizeNumeric>
<ns2:BuyersItemIdentification>
<ID>9568475</ID>
</ns2:BuyersItemIdentification>
<ns2:CommodityClassification>
<CommodityCode>348454</CommodityCode>
</ns2:CommodityClassification>
<ns2:AdditionalItemProperty>
<Name>Weight</Name>
<Value>0</Value>
</ns2:AdditionalItemProperty>
<ns2:AdditionalItemProperty>
<Name>Tare</Name>
<Value>0</Value>
</ns2:AdditionalItemProperty>
<ns2:ManufacturerParty>
<ns2:PartyIdentification>
<ID>7542125</ID>
</ns2:PartyIdentification>
</ns2:ManufacturerParty>
</ns3:Item>
</ns3:BOX>
我正在尝试将其转换为CSV文件.
I'm trying to convert it to a CSV file.
我得到的内容:
[xml]$inputFile = Get-Content test.xml
然后我导出为CSV:
$inputfile.BOX.childnodes | Export-Csv "Stsadm-EnumSites.csv" -NoTypeInformation -Delimiter:";" -Encoding:UTF8
我得到了 Description
和 PackSizeNumeric
字段,但是没有其他字段:
I get the Description
and PackSizeNumeric
fields but not the other fields which are in :
"Description";"PackSizeNumeric";"BuyersItemIdentification";"CommodityClassification";"AdditionalItemProperty";"ManufacturerParty"
"ITEM1";"6";"System.Xml.XmlElement";"System.Xml.XmlElement";"System.Object[]";"System.Xml.XmlElement"
"ITEM2";"10";"System.Xml.XmlElement";"System.Xml.XmlElement";"System.Object[]";"System.Xml.XmlElement"
哪种方法是获取其他命名空间中包含的字段的最佳方法?
Which is the best way to obtain the fields that are contained in other namespaces?
我想得到这个
"Description";"PackSizeNumeric";"BuyersItemIdentification";"CommodityClassification";"Weight";"Tare";PartyIdentification
"ITEM1";"6";"75847589";"856952";"0";"0";"847532"
"ITEM2";"10";"9568475";"348454";"0";"0";"7542125"
推荐答案
选择对象
和 Select-Xml
的组合似乎效果很好:
A combination of Select-Object
and Select-Xml
seems to work pretty well:
$ns = @{
item="urn:loc.gov:item"
ns2="urn:loc.gov:box"
ns3="http://www.example.com/inverter"
ns4="urn:loc.gov:xyz"
}
$doc = New-Object xml
$doc.Load("test.xml")
$doc.BOX.ChildNodes | Select-Object -Property `
Description,`
PackSizeNumeric, `
@{Name="BuyersItemIdentification_ID"; Expression={$_.BuyersItemIdentification.ID}}, `
@{Name="CommodityClassification_CommodityCode"; Expression={$_.CommodityClassification.CommodityCode}}, `
@{Name="Weight"; Expression={Select-Xml -Namespace $ns -Xml $_ -XPath "./ns2:AdditionalItemProperty[item:Name = 'Weight']/item:Value"}}, `
@{Name="Tare"; Expression={Select-Xml -Namespace $ns -Xml $_ -XPath "./ns2:AdditionalItemProperty[item:Name = 'Tare']/item:Value"}}, `
@{Name="ManufacturerParty_ID"; Expression={$_.ManufacturerParty.PartyIdentification.ID}} `
| Export-Csv "Stsadm-EnumSites.csv" -NoTypeInformation -Delimiter:";" -Encoding:UTF8
结果( Stsadm-EnumSites.csv
)
"Description";"PackSizeNumeric";"BuyersItemIdentification_ID";"CommodityClassification_CommodityCode";"Weight";"Tare";"ManufacturerParty_ID"
"ITEM1";"6";"75847589";"856952";"0";"0";"847532"
"ITEM2";"10";"9568475";"348454";"0";"0";"7542125"
这篇关于使用Powershell将具有名称空间的XML转换为CSV的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文