当存在多个具有相同名称的节点时,修改XML中的值

时间:2018-05-24 13:58:22

标签: java xml

<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>

我找到了几个关于如何修改XML文件中的文本的例子。但我的问题是有重复的节点,如下面的例子中节点 Id 多次出现。我想用其他东西修改值 orgNumber ,但我确实无法找到正确的 Id 。任何意见都将不胜感激。

1 个答案:

答案 0 :(得分:-1)

您的XML看起来像是ISO 20022的银行间/付款消息。我使用JAXB和ISO 20022模式取得了成功。 JAXB(J2EE / JEE的一部分,或现在称为Jakarta EE)将为您提供XML消息的Java POJO表示,然后您可以像任何其他Java对象图一样自由地构造和操作它。例如,您可以使用Java表达式(例如

)访问示例中(最里面的)Id元素的内容。
CstmrCdtTrfInitn myMessage = ...;
String valueOfIdElement =
 myMessage.getGrpHdr().getInitgPty().getId().getOrgId().getId();

对于使用JAXB,需要具有描述XML数据的XML Schema文件(.xsd文件)。您需要使用例如.xsd文件生成Java类。 https://github.com/highsource/maven-jaxb2-plugin(来自maven)或只是xjc工具,它是JAXB参考实现的一部分(来自命令行),然后为您拥有的模式配置JAXB。您通常希望至少配置生成的Java类的Java包命名空间。