0

次のようなxmlファイルがあります。

<passwords>
<use>
    <title>LoL</title>
    <username>hallo</username>
    <password>asdasd</password>
    <note>asdasdasdasd</note>
</use>
<E-Mail>
    <use>
        <title>GMail</title>
        <username>hallo</username>
        <password>asdasd</password>
        <note>asdasdasdasd</note>
    </use>
    <Webmail>
        <use>
            <title>Yahoo</title>
            <username>hallo</username>
            <password>asdasd</password>
            <note>asdasdasdasd</note>
        </use>
    </Webmail>
</E-Mail>

そして、カテゴリのクラス

public class Category {
    private ArrayList<Usage> usages;
    private ArrayList<Category> categories; 
    private String name;

    public Category(String name){
        this.name = name;
        usages = new ArrayList<>();
        categories = new ArrayList<>();
    }
    public void addUsage(Usage usage){
        usages.add(usage);
    }
    public void addCategory(Category category){
       categories.add(category);
    }
}

そして使用

public class Usage {
private String title;
private String username;
private String password;
private String notes;


public void setTitle(String title) {
    this.title = title;
}
public void setUsername(String username) {
    this.username = username;
}
public void setPassword(String password) {
    this.password = password;
}
public void setNotes(String notes) {
    this.notes = notes;
}


public String getUsername() {
    return username;
}
public String getPassword() {
    return password;
}
public String getNotes() {
    return notes;
}
public String getTitle(){
    return title;
}

public String toString(){
    return "[[" + this.title + "][" + this.username + "][" + this.password + "][" + this.notes + "]]";
}
}

arraylist 内の他のカテゴリと使用法を含む 1 つのカテゴリ オブジェクトを取得したいのですが、標準のパーサーでそれを分析する方法がわかりません。

サブカテゴリなしで 1 つのカテゴリだけでそれを行う方法を知っています。

4

1 に答える 1

1

前述のように、JAXB を使用できます。これは非常に基本的な例であり、この便利なツールでの作業がいかに簡単かを確認するためのものです。

まず、XML をスキーマに変換するとよいでしょう。以下を使用できます。

http://www.freeformatter.com/xsd-generator.html

しかし、クラスを操作したい場合は、アノテーションを使用できます。たとえば、これは基本的なクラスです。

@XmlRootElement(name = "programmer")
public class ProgrammerBean implements Serializable {
 //Here attributes and getters and setters.
}

クラスを管理するシングルトンであるクラスを宣言します。

public class XMLFileHandler {

    private static XMLFileHandler instance;

    private XMLFileHandler() {
    }

    public static XMLFileHandler getInstance() {
        if (instance == null) {
            instance = new XMLFileHandler();
        }
        return instance;
    }

    public void writeXml(String filePath, Object targetObject)
            throws FileNotFoundException, JAXBException {
        File xmlFile = new File(filePath);
        OutputStream xmlOutput = new FileOutputStream(xmlFile);
        // Define a JAXBContext
        JAXBContext context = null;
        // When I write I use a marshaller
        Marshaller xmlWriter = null;

        // I set the class of the objet to write
        context = JAXBContext.newInstance(targetObject.getClass());
        // I create the marshaller
        xmlWriter = context.createMarshaller();
        // I set the properties for the output
        xmlWriter.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        // Finally write
        xmlWriter.marshal(targetObject, xmlOutput);

    }

    public Object readXml(String filePath, Class objType) throws JAXBException {
        Object read = null;
        JAXBContext context = null;
        Unmarshaller xmlReader = null;

        context = JAXBContext.newInstance(objType);
        xmlReader = context.createUnmarshaller();
        read = xmlReader.unmarshal(new File(filePath));
        return read;
    }
}

次に、使用のために次のことができます。

XmlFileHandler xmlHandler = XmlFileHandler.getInstance();
ProgrammerBean myObject = (ProgrammerBean) xmlHandler.readXml("/home/developer/programmer.xml", ProgrammerBean.class);

前述のように、スキーマを使用してそこから jaxb クラスを生成すると簡単になるため、JaxB の基本に役立つことを願っています。よろしくお願いします。

于 2013-06-11T13:57:57.143 に答える