Java DOM : transforming a node to a root element

标签 java xml dom

我有以下 XML 文件(SOAP 响应),我正在尝试将其映射到 Java 对象:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:AffaireByTiersResponse xmlns:ns2="http://service.hibernate.com/">
      <Affaire>
        <code_produit>Cred</code_produit>
        <id>1</id>
        <montant_fin>2000.0</montant_fin>
        <id_tier>1</id_tier>
      </Affaire>
      <Affaire>
        <code_produit>Cred</code_produit>
        <id>2</id>
        <montant_fin>25000.0</montant_fin>
        <id_tier>1</id_tier>
      </Affaire>
    </ns2:AffaireByTiersResponse>
  </soap:Body>
</soap:Envelope>

为了编码文件,我只需要保留标签 <AffaireByTiersResponse>作为根元素并将其名称更改为 <Affaires> .

最好的方法是什么?

最佳答案

可以使用javax.xml.soap.MessageFactory从 SOAP 信封中提取底层内容。

String example = new String(Files.readAllBytes(Paths.get("input.xml")), StandardCharsets.UTF_8);
SOAPMessage message = MessageFactory.newInstance().createMessage(null,
        new ByteArrayInputStream(example.getBytes()));

Document doc = message.getSOAPBody().extractContentAsDocument();

Element root = doc.getDocumentElement();

然后可以重命名根节点

doc.renameNode(root, root.getNamespaceURI(), "Affaires");

然后可以将此文档传递到 JAXB 解码器

Unmarshaller unmarshaller = JAXBContext.newInstance(Affaires.class).createUnmarshaller();
Affaires farm = (Affaires) unmarshaller.unmarshal(doc);

关于Java DOM : transforming a node to a root element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42766535/

相关文章:

java - 如何使用我的日志格式简单地创建我自己的自定义控制台记录器?

java - jpa mssql @Lob 并创建具有可移植性的 2GB 列

arrays - 使用 swift 解析 xml 数组并将数据存储到数组或字典中

javascript - 为动态添加的元素添加类

dom - 如何使用 Dart 动态添加样式表?

javascript - CSS 相对位置/正常位置问题

java - 无法从用户表中获取所有 userRole = "ManagerRole"的位置

java - 滑动面板android无法构建

xml - Delphi 中是否有将 XML 日期和时间转换为 TDateTime 的函数

java - Android PdfDocument 在保存到外部存储时损坏