Java 当存在多个同名节点时修改XML中的值 201805231510 2018-05-23T12:01:14 1. 111 客户名称 orgNumber ABCD
我发现了几个关于如何修改XML文件中某些文本的示例。但我的问题是存在重复的节点,如下面的示例中,节点Id多次出现。我想用其他东西修改值orgNumber,但我没有找到正确的Id。任何输入都将不胜感激。您的XML看起来像ISO 20022银行间/支付消息。我已经成功地将JAXB与ISO20022模式结合使用。JAXB(J2EE/JEE的一部分,或者现在称之为Jakarta EE)将为您提供XML消息的Java POJO表示,然后您可以像任何其他Java对象图一样自由构建和操作该消息。例如,您可以使用Java表达式访问示例中(最里面的)Java 当存在多个同名节点时修改XML中的值 201805231510 2018-05-23T12:01:14 1. 111 客户名称 orgNumber ABCD,java,xml,Java,Xml,我发现了几个关于如何修改XML文件中某些文本的示例。但我的问题是存在重复的节点,如下面的示例中,节点Id多次出现。我想用其他东西修改值orgNumber,但我没有找到正确的Id。任何输入都将不胜感激。您的XML看起来像ISO 20022银行间/支付消息。我已经成功地将JAXB与ISO20022模式结合使用。JAXB(J2EE/JEE的一部分,或者现在称之为Jakarta EE)将为您提供XML消息的Java POJO表示,然后您可以像任何其他Java对象图一样自由构建和操作该消息。例如,您可以使
Id
元素的内容,如
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>201805231510</MsgId>
<CreDtTm>2018-05-23T12:01:14</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>111.00</CtrlSum>
<InitgPty>
<Nm>custName</Nm>
<Id>
<OrgId>
<Othr>
<Id>orgNumber</Id>
<SchmeNm>
<Cd>ABCD</Cd>
</SchmeNm>
</Othr>
</OrgId>
</Id>
</InitgPty>
</GrpHdr>
</CstmrCdtTrfInitn>
要使用JAXB,需要有描述XML数据的XML模式文件(
.xsd
文件)。您需要从.xsd
文件中生成Java类,使用例如(来自maven)或仅使用作为JAXB参考实现一部分的xjc
工具(来自命令行),然后为您拥有的模式配置JAXB。您通常希望至少配置生成的Java类的Java包名称空间。到目前为止您尝试了什么?我们不想建议对您不起作用的内容。使用您最喜欢的DOM解析器解析整个XML树并在那里进行更改,然后序列化回文本。建议使用XPath和DOM API可能会以一般方式回答这个问题,但对于ISO 20022和其他大规模XML消息有效负载来说,这肯定是错误的方法;这里更推荐JAXB或其他类型化方法,因为ISO 20022消息模式是由UMLThank生成的,请大家评论我的文章。这个JAXB听起来像是我需要进一步了解的东西,但正如您所注意到的,我没有做过太多编程,所以我正在尝试一些至少可以找到一些示例的东西。我尝试了很多不同的方法,但或多或少都是以下面的方式,我无法到达workNodeList InitgPtyNodeList=doc.getElementsByTagName(“InitgPty”);对于(int i=0;iCstmrCdtTrfInitn myMessage = ...;
String valueOfIdElement =
myMessage.getGrpHdr().getInitgPty().getId().getOrgId().getId();