jackson 从xml的字段列表中获取对象

goucqfw6  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(137)

请建议最佳解决方案。有以下xml文件

<?xml version="1.0" encoding="UTF-8"?>
<CATALOG>
    <CD>
        <TITLE>Empire Burlesque</TITLE>
        <ARTIST>Bob Dylan</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>Columbia</COMPANY>
        <PRICE>10.90</PRICE>
        <YEAR>1985</YEAR>
    </CD>
    <CD>
        <TITLE>Hide your heart</TITLE>
        <ARTIST>Bonnie Tyler</ARTIST>
        <COUNTRY>UK</COUNTRY>
        <COMPANY>CBS Records</COMPANY>
        <PRICE>9.90</PRICE>
        <YEAR>1988</YEAR>
    </CD>
    <CD>
        <TITLE>Greatest Hits</TITLE>
        <ARTIST>Dolly Parton</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>RCA</COMPANY>
        <PRICE>9.90</PRICE>
        <YEAR>1982</YEAR>
    </CD>
    <CD>
        <TITLE>Still got the blues</TITLE>
        <ARTIST>Gary Moore</ARTIST>
        <COUNTRY>UK</COUNTRY>
        <COMPANY>Virgin records</COMPANY>
        <PRICE>10.20</PRICE>
        <YEAR>1990</YEAR>
    </CD>
    <CD>
        <TITLE>Eros</TITLE>
        <ARTIST>Eros Ramazzotti</ARTIST>
        <COUNTRY>EU</COUNTRY>
        <COMPANY>BMG</COMPANY>
        <PRICE>9.90</PRICE>
        <YEAR>1997</YEAR>
    </CD>
    <CD>
        <TITLE>One night only</TITLE>
        <ARTIST>Bee Gees</ARTIST>
        <COUNTRY>UK</COUNTRY>
        <COMPANY>Polydor</COMPANY>
        <PRICE>10.90</PRICE>
        <YEAR>1998</YEAR>
    </CD>
</CATALOG>

也有5类:目录,CD,专辑,艺术家,国家,注册表
我怎么才能得到注册表的对象与填充字段:

public class Registry {

    private List<Country> countries = new ArrayList<>();
}

public class Country {
    private String name; // <COUNTRY>...</COUNTRY>
    private List<Artist> artists = new ArrayList<>();
}

public class Artist {
    private String name; // <ARTIST>...</ARTIST>
    private List<Album> albums = new ArrayList<>();
}

public class Album {
    private String name; // <TITLE>...</TITLE>
    private int year; // <YEAR>...</YEAR>
}

还有

  • 公共类目录{
@JacksonXmlProperty(localName = "CD")
@JacksonXmlElementWrapper(useWrapping = false)
  • 个人名单光盘;
  • 公用分发名单getCds(){
  • 退回cds;
}
  • }
  • 公共类Cd {
@JsonProperty("TITLE") // Album name
  • 私有字符串标题;
@JsonProperty("ARTIST") // Artist name
  • 私人弦乐艺术家;
@JsonProperty("COUNTRY") // Country name
  • 私有字符串国家;
@JsonProperty("COMPANY")
  • 私有String公司;
@JsonProperty("PRICE")
  • 私人双重价格
@JsonProperty("YEAR")  // Album year
  • 私营部门间;
  • }
bbuxkriu

bbuxkriu1#

使用Powershell。下面将把xml输入到表中。然后你可以使用组对象或排序对象。NotePropertyName是一个哈希值。

using assembly System.Xml.Linq

$Filename = "c:\temp\test.xml"

$albums = [System.Collections.ArrayList]::new()  

$xDoc = [System.Xml.Linq.XDocument]::Load($Filename)
foreach($cd in $xDoc.Descendants("CD"))
{
   $newAlbum = New-Object -TypeName psobject
   
   $title = $cd.Element("TITLE").Value
   $newAlbum | Add-Member -NotePropertyName Title -NotePropertyValue $title

   $artist = $cd.Element("ARTIST").Value
   $newAlbum | Add-Member -NotePropertyName Artist -NotePropertyValue $artist   
   
   $country = $cd.Element("COUNTRY").Value
   $newAlbum | Add-Member -NotePropertyName Country -NotePropertyValue $country   
   
   $company = $cd.Element("COMPANY").Value
   $newAlbum | Add-Member -NotePropertyName Company -NotePropertyValue $company   
   
   $price = [decimal]$cd.Element("PRICE").Value
   $newAlbum | Add-Member -NotePropertyName Price -NotePropertyValue $price
     
   $year = [int]$cd.Element("YEAR").Value
   $newAlbum | Add-Member -NotePropertyName Year -NotePropertyValue $year

   $albums.Add($newAlbum) | Out-Null
}
Write-Host "All Albums"
$albums | Format-Table

相关问题