Şu anda DOM ayrıştırıcısını kullanarak JAVA'da bir XML belgesi oluşturmaya çalışıyorum. Başka bir soruda yayınlanan başka bir cevap kullanıyorum ve bana çok yardımcı oldu, ancak cevabım bana sahip olduğum birkaç vakayla birlikte bana yardımcı olacak kadar ayrıntıya girmiyor. Ben bugüne kadar benim XML dosyası ilan edilmiştir nasıl beni göstererek başlayalım:XML dosyası oluşturma ile ilgili sorular
package creatingXML;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class CreateXML
{
public static void main(String args[]){
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("Document");
doc.appendChild(rootElement);
Element BkToCstmrDbtCdtNtfctn = doc.createElement("BkToCstmrDbtCdNtfctn");
rootElement.appendChild(BkToCstmrDbtCdtNtfctn);
Element GrpHdr = doc.createElement("GrpHdr");
BkToCstmrDbtCdtNtfctn.appendChild(GrpHdr);
Element MsgId = doc.createElement("MsgId");
GrpHdr.appendChild(MsgId);
MsgId.appendChild(doc.createTextNode("0000000")); //MSG ID WILL GO HERE
Element CreDtTm = doc.createElement("CreDtTm");
GrpHdr.appendChild(CreDtTm);
CreDtTm.appendChild(doc.createTextNode("2016-03-31T02:51:44")); //CREDIT DATE TIME WILL GO HERE
//MsgRcpt Tree
Element MsgRcpt = doc.createElement("MsgRcpt");
GrpHdr.appendChild(MsgRcpt);
Element Id = doc.createElement("Id");
MsgRcpt.appendChild(Id);
Element OrgId = doc.createElement("OrgId");
Id.appendChild(OrgId);
Element Othr = doc.createElement("Othr");
OrgId.appendChild(Othr);
Element Id2 = doc.createElement("Id");
Othr.appendChild(Id2);
Id2.appendChild(doc.createTextNode("CS")); //Org ID will go here!
Element Ntfctn = doc.createElement("Ntfctn");
BkToCstmrDbtCdtNtfctn.appendChild(Ntfctn);
Element Id3 = doc.createElement("Id");
Ntfctn.appendChild(Id3);
Id3.appendChild(doc.createTextNode("163V2514435W14QI")); //Transaction ID will go here!
Element CreDtTm2 = doc.createElement("CreDtTm");
Ntfctn.appendChild(CreDtTm2);
CreDtTm2.appendChild(doc.createTextNode("2016-03-31T02:51:44")); //Transaction credit date time will go here!
//Acct tree
Element Acct = doc.createElement("Acct");
Ntfctn.appendChild(Acct);
Element Id4 = doc.createElement("Id");
Acct.appendChild(Id4);
Element Othr2 = doc.createElement("Othr");
Id4.appendChild(Othr2);
Element Id5 = doc.createElement("Id5");
Othr2.appendChild(Id5);
Id5.appendChild(doc.createTextNode("41215212776")); //Acct ID will go here!
//TxsSummry tree
Element TxsSummry = doc.createElement("TxsSummry");
Ntfctn.appendChild(TxsSummry);
Element TtlDbtNtries = doc.createElement("TtlDbtNtries");
TxsSummry.appendChild(TtlDbtNtries);
Element NbOfNtries = doc.createElement("NbOfNtries");
TtlDbtNtries.appendChild(NbOfNtries);
NbOfNtries.appendChild(doc.createTextNode("1")); //Number of entires will go here!
Element Sum = doc.createElement("Sum");
TtlDbtNtries.appendChild(Sum);
Sum.appendChild(doc.createTextNode("97.99")); //Total sum will go here!
//Possible loop will go here
Element Ntry = doc.createElement("Ntry");
Ntfctn.appendChild(Ntry);
Element NtryRef = doc.createElement("NtryRef");
Ntry.appendChild(NtryRef);
NtryRef.appendChild(doc.createTextNode("163V24924AFW1LJ4")); //Ntry Reference ID
Element AmtCcy = doc.createElement("Amt Ccy");
NtryRef.appendChild(AmtCcy);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("C:\\Users\\jhamric\\Desktop\\testing.xml"));
transformer.transform(source, result);
}catch (ParserConfigurationException pce){
pce.printStackTrace();
}catch (TransformerException tfe){
tfe.printStackTrace();
}
}
}
O kod çok iyi bir oyun biliyorum ama şimdiye kadar ben mümkün olmuştur anlayabileceği ne yayınlayarak düşünmüş yapmak. Öğeleri oluşturma, alt öğeleri atama ve bu öğelere bir metin değeri atama konusunda sorun yaşıyorum. Şu an sahip olduğum problem, yaratmam gereken iki farklı unsuru içeriyor.
ilk kök öğedir, böyle bir ad alanı kullanmak gerekir:
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04">
bunun yerine şu anda sahip olduğu sadece sahip.
Burada gibi bazı cevaplar ancak gerçekten benim koduyla yürütmek anlayamıyorum bir XPath kullanılarak açıklamak
Issues with xpath that contained namespaces in Java (Dom parser)
buldunuz.
Ben ikinci sorun saha şu şekildedir:
<Amt Ccy="USD">94134.86</Amt>
etiketin = "USD" ve aynı zamanda bir metin düğümü atanır görünür Gördüğünüz gibi.
BuElement AmtCcy = doc.createElement("Amt_Ccy='USD'");
yapıyor çalıştı ama aşağıdaki hatayı alıyorum ..
Exception in thread "main" org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified.
at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.createElement(Unknown Source)
at creatingXML.CreateXML.main(CreateXML.java:103)
Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook
Picked up _JAVA_OPTIONS: -Xrunjvmhook -Xbootclasspath/a:"C:\Program Files (x86)\HP\Unified Functional Testing\bin\java_shared\classes";"C:\Program Files (x86)\HP\Unified Functional Testing\bin\java_shared\classes\jasmine.jar"
bu iki konularla herhangi bir yardım takdir gerçekten olacaktır.
ne hakkında 'rootElement' setAttribute özellikler eklenirken ("xmlns", "urn: iso: std: iso: 20022: teknoloji: xsd: camt.054.001.04") ; ? – Tokazio