4

実行時に変更可能なxmlスキーマファイルがあります。XPath 式と XML ファイルに入力する値を使用して、コードで Java コレクションを取得しています。これらすべてのランタイム入力を利用して、XML ファイルを生成する必要があります。以下にサンプルの入力と出力を添付します。

  1. 以下はスキーマの例です (固定形式はありません):

        <xs:complexType name="root">
            <xs:sequence>
                <xs:element name="top" type="topType" />
            </xs:sequence>
       </xs:complexType>            
       <xs:element name="root" type="root">
       </xs:element>              
       <xs:complexType name="topType">
          <xs:element name="mode" use="required" />
           <xs:element name="address" use="required" />
       </xs:complexType>
    
  2. 私が取得しているxpath式と値は、ハッシュマップからのキーと値のペアです。これらの xpath 値を、対応する XMLElement 値と共に output.xml に配置する必要があります。xpath 式と値は次のとおりです。

    1. 式: /root/top/address 値:10.200.111。
    2. 式: /root/top/mode 値:cluster
  3. Java コードは XML ファイルを Output.xml として生成する必要があります:(これは、収集されたすべての入力から実行時に生成する必要があるダミー ファイルです)

    <root>
        <top>
            <mode>cluster</mode>
            <address>10.200.111.111</address>
        </top>
    </root>
    

誰かがそのようなシナリオに遭遇したかどうかを提案してください。

前もって感謝します。

4

2 に答える 2

0

このコードをチェックしてみてください。とてもシンプルです

public class MyTestClass {

    public static void main(String[] args) {
        try{
        Map map= new HashMap<String,String>();
        map.put("cluster", "10.200.111.111");
        map.put("cluster1", "10.200.121.111");

        MyXML xml = new MyXML();
        List<Top> top1= new ArrayList<Top>();
        Set<String> keys = map.keySet();
        for(String key : keys){
            Top top=new Top();
            top.setMode(key);
            top.setAddress((String)map.get(key));
            top1.add(top);
        }
        xml.setTop(top1);
        File file = new File("C:\\kar\\file.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(MyXML.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        // output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        jaxbMarshaller.marshal(xml, file);
        jaxbMarshaller.marshal(xml, System.out);
        }catch(Exception ex){
            System.out.println(ex.getMessage());
        }
    }
}


@XmlRootElement(name="top")
@XmlType(name="top")
@XmlAccessorType(XmlAccessType.FIELD)
public class Top {

    @XmlElement(name="mode", required=true)
    private String mode;

    @XmlElement(name="mode", required=true)
    private String address;

    public String getMode() {
        return mode;
    }

    public void setMode(String mode) {
        this.mode = mode;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }




}





@XmlRootElement(name="root")
@XmlType(name="root")
@XmlAccessorType(XmlAccessType.FIELD)
public class MyXML {


    @XmlElement(name="Top")
    private List<Top> top;

    public List<Top> getTop() {
        return top;
    }

    public void setTop(List<Top> top) {
        this.top = top;
    }

}

XSLT、 http: //www.ictforu.com/index.php/Core-Java/java-xslt.html を使用して行うこともできます。

于 2013-05-16T06:28:22.287 に答える