gpt4 book ai didi

java - 关于创建 XML 文件的问题

转载 作者:行者123 更新时间:2023-11-29 02:58:59 25 4
gpt4 key购买 nike

我目前正在尝试使用 DOM 解析器在 JAVA 中创建 XML 文档。我正在使用另一个问题中发布的另一个答案,它对我有很大帮助,但是这个答案没有足够的细节来帮助我处理我遇到的几个案例。让我首先展示到目前为止我是如何声明我的 XML 文件的:

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();
}

}

}

我知道这是一段很好的代码,但我认为通过发布到目前为止我所拥有的代码,您可以理解我能够做什么。我可以轻松创建元素、分配子元素并为这些元素分配文本值。我现在遇到的问题涉及我需要创建的两个不同元素。

首先是根元素,我需要使用这样的命名空间:

+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04">

而不是像我现在拥有的那样。

我确实在这里找到了一些答案

Issues with xpath that contained namespaces in Java (Dom parser)

解释了如何使用 XPath,但是我真的不明白如何用我的代码执行它。

我遇到的第二个问题是这样的字段:

<Amt Ccy="USD">94134.86</Amt>

如您所见,标签 ="USD"似乎也分配了一个文本节点。

我试过这样做

Element AmtCcy = doc.createElement("Amt_Ccy='USD'");

但我收到以下错误..

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"

对于这两个问题,我将不胜感激。

最佳答案

您使用 createElementNs 创建了一个命名空间元素:

Element rootElement doc.createElementNS("urn:iso:std:iso:20022:tech:xsd:camt.054.001.04", 
"Document");

第二 <Amt Ccy="USD">94134.86</Amt>是一个元素Amt具有属性 Ccy具有值(value) USD94134.86 的文本上下文.要创建属性,请写入:

Element AmtCcy = doc.createElement("Amty");
AmtCcy.setAttribute("Ccy", "USD");
NtryRef.appendChild(AmtCcy);

关于java - 关于创建 XML 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com