小葡萄、 2024-01-04 17:46 采纳率: 16.7%
浏览 10
问题最晚将于01月12日00:00点结题

java 后端怎么接收xml格式的


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<msg>
    <head>
        <msgId>12121</msgId>
        <msgName>H2121字典</msgName>
        <sourceSysCode>S0281</sourceSysCode>
        <targetSysCode/>
        <createTime>202012301732121425</createTime>
        <version>0</version>
    </head>
    <body>
        <row action="update">
            <ctlocRowid>4731</ctlocRowid>
            <ctlocCode>199421212</ctlocCode>
            <ctlocName>YBZ</ctlocName>
            <hospitalRowid>-2</hospitalRowid>
            <hospitalCode>121</hospitalCode>
            <hospitalName>附属医院</hospitalName>
            <ctlocType>W1</ctlocType>
            <depRowid>123</depRowid>
            <depCode>221</depCode>
            <depName>干部心1</depName>
            <validDate>2009-05-22 12:00:00</validDate>
            <invalidDate>2010-01-18 12:00:00</invalidDate>
            <medicalAble>N</medicalAble>
        </row>
    </body>
</msg>

java 怎么获取这里面head 和body 的值 (注意: body里面的 action里面的update 也要获取到)

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-04 17:47
    关注

    引自免费微信小程序:皆我百晓生

    要在Java后端中接收XML格式的数据,并获取其中的head和body值,可以使用Java的XML解析库进行解析。以下是使用DOM解析方式的示例代码:

    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    public class XmlParser {
        public static void main(String[] args) {
            String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
                    "<msg>\n" +
                    "    <head>\n" +
                    "        <msgId>12121</msgId>\n" +
                    "        <msgName>H2121字典</msgName>\n" +
                    "        <sourceSysCode>S0281</sourceSysCode>\n" +
                    "        <targetSysCode/>\n" +
                    "        <createTime>202012301732121425</createTime>\n" +
                    "        <version>0</version>\n" +
                    "    </head>\n" +
                    "    <body>\n" +
                    "        <row action=\"update\">\n" +
                    "            <ctlocRowid>4731</ctlocRowid>\n" +
                    "            <ctlocCode>199421212</ctlocCode>\n" +
                    "            <ctlocName>YBZ</ctlocName>\n" +
                    "            <hospitalRowid>-2</hospitalRowid>\n" +
                    "            <hospitalCode>121</hospitalCode>\n" +
                    "            <hospitalName>附属医院</hospitalName>\n" +
                    "            <ctlocType>W1</ctlocType>\n" +
                    "            <depRowid>123</depRowid>\n" +
                    "            <depCode>221</depCode>\n" +
                    "            <depName>干部心1</depName>\n" +
                    "            <validDate>2009-05-22 12:00:00</validDate>\n" +
                    "            <invalidDate>2010-01-18 12:00:00</invalidDate>\n" +
                    "            <medicalAble>N</medicalAble>\n" +
                    "        </row>\n" +
                    "    </body>\n" +
                    "</msg>";
    
            try {
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document doc = builder.parse(new InputSource(new StringReader(xml)));
    
                Element root = doc.getDocumentElement();
    
                // 获取head节点的值
                NodeList headList = root.getElementsByTagName("head");
                Element headElement = (Element) headList.item(0);
                String msgId = headElement.getElementsByTagName("msgId").item(0).getTextContent();
                String msgName = headElement.getElementsByTagName("msgName").item(0).getTextContent();
                String sourceSysCode = headElement.getElementsByTagName("sourceSysCode").item(0).getTextContent();
                String createTime = headElement.getElementsByTagName("createTime").item(0).getTextContent();
                String version = headElement.getElementsByTagName("version").item(0).getTextContent();
    
                // 获取body节点的值
                NodeList bodyList = root.getElementsByTagName("body");
                Element bodyElement = (Element) bodyList.item(0);
                Element rowElement = (Element) bodyElement.getElementsByTagName("row").item(0);
                String action = rowElement.getAttribute("action");
    
                // 输出获取到的值
                System.out.println("msgId: " + msgId);
                System.out.println("msgName: " + msgName);
                System.out.println("sourceSysCode: " + sourceSysCode);
                System.out.println("createTime: " + createTime);
                System.out.println("version: " + version);
                System.out.println("action: " + action);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    以上代码使用了DOM解析方式,通过DocumentBuilder解析XML字符串,然后根据节点名称获取相应的值。具体实现过程如下:

    1. 创建DocumentBuilderFactoryDocumentBuilder实例。
    2. 使用DocumentBuilder解析XML字符串,得到Document对象。
    3. 通过getDocumentElement()方法获取根节点msg
    4. 通过getElementsByTagName()方法获取head节点的列表,再通过索引item(0)获取head节点元素。
    5. 解析head节点下的子节点的值,例如msgIdmsgName等。
    6. 通过getElementsByTagName()方法获取body节点的列表,再通过索引item(0)获取body节点元素。
    7. 通过getElementsByTagName()getAttribute()方法获取row节点的属性action的值。

    请注意替换代码中的xml变量为你实际的XML字符串。

    运行以上代码,将输出如下结果:

    msgId: 12121
    msgName: H2121字典
    sourceSysCode: S0281
    createTime: 202012301732121425
    version: 0
    action: update 
    

    这样你就成功地获取到了XML中head和body的值,以及body中action属性的值。

    评论
    1人已打赏

报告相同问题?

问题事件

  • 已采纳回答 1月4日
  • 创建了问题 1月4日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?