0

この形式でxmlファイルを生成したい。

   <?xml version="1.0" encoding="UTF-8"?>  
    <Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"  
        folio="779" fecha="2011-12-05T18:24:42"  
        sello="..."  
        formaDePago="PAGO EN UNA SOLA EXHIBICION" noCertificado="00001000000102160027" condicionesDePago="EFECTOS FISCALES AL PAGO"  
        subTotal="5123.23" total="5942.95" Moneda="USD" tipoDeComprobante="ingreso"  
        xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv3.xsd">  
      <Emisor rfc="TIA050408342" nombre="TECNOLOGIAS DE INFORMACION AMERICA S.A. DE C.V.">  
        <DomicilioFiscal calle="Montecito" noExterior="38" noInterior="P 32-5" colonia="Napoles" localidad="Distrito Federal"  
            municipio="Distrito Federal" estado="México" pais="Mex." codigoPostal="03810" />  
      </Emisor>  
      <Addenda>  
        <ElementosClientesNormales xmlns:ext="http://www.buzone.com.mx/XSD/Sender19877/A"  
            xsi:schemaLocation="http://www.buzone.com.mx/XSD/Sender19877/A http://www.buzone.com.mx/XSD/Sender19877/A/Addenda.xsd">  
          <Conector>TEX9302097F3</Conector>  
          <CadenaOriginal>...about 1000 characters...</CadenaOriginal>  
      </Addenda>  
    </Comprobante> 

私たちが知っているように、SAXパーサー、JAXB、またはdom4jを使用してxmlファイルを作成できます

しかし、それでも Comprobante:cfdi のようなタグを生成して、folio="774" などの要素を追加することはできません。

また、次のようなタグを作成する方法Emisor:cfdi rfc

Javaを使用してそのようなxml作成を作成するにはどうすればよいですか? このようなxmlファイルを作成する方法を説明するブログ、チュートリアル。

ありがとう、ラン

4

3 に答える 3

1

で要素と属性を作成してみてくださいnamspace

以下は、標準の Java xml API を使用したサンプル コードです。

@Test
public void genXmlWithNamespace() throws ParserConfigurationException, TransformerFactoryConfigurationError, TransformerException {

    String nsURI = "http://example.com/foo";

    DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = docBuilder.newDocument();
    doc.setXmlStandalone(true);
    Element root = doc.createElementNS(nsURI, "foo:company");
    doc.appendChild(root);

    root.setAttributeNS(nsURI, "foo:name", "example");

    Element e = null;

    e = doc.createElementNS(nsURI, "foo:employee");
    e.setAttributeNS(nsURI, "foo:id", "1");
    e.setTextContent("John Doe");
    root.appendChild(e);

    e = doc.createElementNS(nsURI, "foo:employee");
    e.setAttributeNS(nsURI, "foo:id", "2");
    e.setTextContent("John Smith");
    root.appendChild(e);

    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
    Result output = new StreamResult(System.out);
    Source input = new DOMSource(doc);
    transformer.transform(input, output);
}

出力

<?xml version="1.0" encoding="UTF-8"?>
<foo:company xmlns:foo="http://example.com/foo" foo:name="example">
    <foo:employee foo:id="1">John Doe</foo:employee>
    <foo:employee foo:id="2">John Smith</foo:employee>
</foo:company>
于 2013-05-09T14:55:04.323 に答える
1

xml から、XML スキーマ ファイルhttp://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv3.xsdおよびhttpを参照していることがわかります。 ://www.buzone.com.mx/XSD/Sender19877/A/Addenda.xsd . これらのスキーマをダウンロードし、JAXB を使用して Java クラスを生成します。xml の生成に JAXB を使用すると、期待どおりの互換性が得られます。それ以外の場合、xsd 参照には意味がありません。

これらの xsd を取得できない場合、オプションは次のようになります。1. trang ライブラリを使用して、上記の xml から xsd を生成します ( http://www.dotkam.com/2008/05/28/generate-xsd-from-xml/ )。2. XSD をクリーンアップします。tran から生成された XSD が常に正しいとは限りません。3. xjc を使用して xsd から JAXB クラスを生成します。 4. ネームスペースを関連付ける必要がある場合は、JAXB クラスを変更します。

于 2013-05-09T14:19:42.540 に答える