简体   繁体   English

如何在java中删除xml消息的soap信封

[英]How to remove the soap envelope of an xml message in java

I'm trying to remove the soap envelope in an xml message and just keeping the body, but instead, I've ended up remove everything besides whatever is above the parent node.我试图删除 xml 消息中的肥皂信封并只保留正文,但相反,我最终删除了除父节点上方的所有内容之外的所有内容。

This is the xml message:这是 xml 消息:

<soap:Envelope xmlns:soap="test" xmlns:ns="test">
       <soap:Header/>
       <soap:Body>
<book>
  <person>
    <name>Person 1</name>
  </person>
  <person>
    <name>Person 2</name>
  </person>
  <person>
    <name>Person 3</name>
  </person>
  <person>
    <name>Person 4</name>
  </person>
</book>
</soap:Body>
    </soap:Envelope>

I want to remove the soap envelopes so ultimately, I should end up with the following xml message:我想删除肥皂信封,所以最终,我应该得到以下 xml 消息:

<book>
      <person>
        <name>Person 1</name>
      </person>
      <person>
        <name>Person 2</name>
      </person>
      <person>
        <name>Person 3</name>
      </person>
      <person>
        <name>Person 4</name>
      </person>
    </book>

This is my method code:这是我的方法代码:

 public static void deleteNodeFromXML(String xmlString, String elementName, String propertyName) {


        String value = null;
        try {
            NodeList nodeList = getNodeListFromXML(xmlString, elementName);

            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {

                    System.out.println("NODE CONDITION MET");
                    Element element = (Element) node;
                    element.getParentNode().removeChild(element);
                    System.out.println("ABOUT TO PRINT OUT THE NEW XML: " );
                    printXML(doc);

The way I seem to be doing it isnt working.我似乎正在做的方式不起作用。

SimpleXml can do it: SimpleXml 可以做到:

final String yoursoap = ...;
final SimpleXml simple = new SimpleXml();
System.out.println(simple.domToXml(getBook(simple.fromXml(yoursoap))));

private static Element getBook(final Element element) {
    return element.children.get(1).children.get(0);
}

Will output:将输出:

<book><person><name>Person 1</name></person><person><name>Person 2</name></person><person><name>Person 3</name></person><person><name>Person 4</name></person></book>

From maven central:从 Maven 中心:

<dependency>
    <groupId>com.github.codemonstur</groupId>
    <artifactId>simplexml</artifactId>
    <version>1.4.0</version>
</dependency>

我正在使用以下(纯Java):

String xmlWithoutSoapEnveloppe = xmlWithSoapEnveloppe.replaceAll("\\s*<\\/?(?:SOAP-ENV|soap):(?:.|\\s)*?>", "");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM