3

XML ドキュメントを Java DOM データ構造に読み込みました。ドキュメントを検索し、For ループを使用して情報を見つけることができます。次に、親ノードと子ノード内に保持されているすべての情報を端末に出力できます。

ただし、特定の要素を取得してスプレッドシートに出力できるようにする必要があります。したがって、どういうわけか値をcsvドキュメントに書き込んで、それをExcelにインポートできます。

これにより、数週間かかるスプレッドシートに値を手動でコピーする必要があったため、多くの時間を節約できます。自動化が最善の選択肢ですが、私はJavaの経験がありません。どんな助けでも大歓迎です。

4

1 に答える 1

2

単一の DOM パーサー インスタンスでこれを行うのは非常に面倒です。そのために、xml ファイルのすべてのデータを含む JavaBean を作成することをお勧めします。そのクラスで呼び出される単純なメソッドはtoCsv、すべてのアイテムを反復処理し、フォーマットされたコンテンツを返すか、csv ファイルに出力します。このアプローチに従えばJava Architecture for XML Binding (JAXB)、XML オブジェクトと Java オブジェクト間のマーシャリングとアンマーシャリングを行う を簡単に使用できます。保守が難しいカスタム DOM パーサーの実装はもう必要ありません。JAXB は、パーサー規則を定義するアノテーションを処理します。簡単な例を次に示します。

public interface DataEntity {

    /**
     * NameSpace of XSD schema files.
     */
    public final static String NSP = "https://localhost/project/xsd/";

}


import java.io.Serializable;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import at.fhj.ase.dao.data.validation.ValidationHelper;

/**
 * Represents a product category
 * 
 */
@XmlRootElement(name = "category", namespace = DataEntity.NSP)
public class Category implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -487248720383832971L;

    private Integer id;
    private String name;
    private String description;

    protected Category() {

    }

    public Category(final Integer id, final String name,
            final String description) {
        setId(id);
        setName(name);
        setDescription(description);
    }

    @XmlAttribute
    public Integer getId() {
        return id;
    }

    private void setId(Integer id) {
        ValidationHelper.validateId(id);

        this.id = id;
    }

    @XmlElement(namespace = DataEntity.NSP)
    public String getName() {
        return name;
    }

    private void setName(String name) {
        ValidationHelper.validateSingleName(name, "name");

        this.name = name;
    }

    @XmlElement(namespace = DataEntity.NSP)
    public String getDescription() {
        return description;
    }

    private void setDescription(String description) {
        ValidationHelper.validateSingleName(description, "description");

        this.description = description;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Id: ").append(id).append(" Name: ").append(getName())
                .append(" Description: ").append(description);

        return sb.toString();
    }

}

入力としてのxmlファイル:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <category xmlns="https://localhost/project/xsd/" id="1">
    <description>des_swdevelopment</description>
    <name>swdevelopment</name>
</category>

また、xml から Java にアンマーシャリングする方法: Interface Unmarshaller

toCsvメソッドを追加するだけで完了です。このアプローチにより、多くの時間を節約でき、メンテナンスも非常に簡単です。

于 2013-08-16T17:21:52.053 に答える