java 解析 xml 字符串转换为实体,实体转换为 xml 字符串

文章介绍了如何使用Java的JAXB库在XmlCommonUtil类中实现XML字符串与SqlXml实体对象之间的转换,包括`convertXmlStrToObject`和`convertObjectToXml`方法,以及如何处理XmlList.xml文件和SqlXml实体类的定义。
摘要由CSDN通过智能技术生成

java 解析 xml 字符串转换为实体,实体转换为 xml 字符串

1. XmlCommonUtil工具类代码如下:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/**
 * XmlCommonUtil类用于XML字符串和对象之间的转换以及读取文件操作
 */
public class XmlCommonUtil {

    /**
     * 将XML字符串转换为指定类的对象
     *
     * @param xml   XML字符串
     * @param clazz 目标类的Class对象
     * @return 转换后的对象
     */
    public static Object convertXmlStrToObject(String xml, Class clazz) throws Exception {
        JAXBContext context = JAXBContext.newInstance(clazz);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        StringReader reader = new StringReader(xml);
        return unmarshaller.unmarshal(reader);
    }

    /**
     * 将实体对象转换为XML字符串
     *
     * @param obj 实体对象
     * @return 转换后的字符串
     */
    public static String convertObjectToXml(Object obj) throws Exception {
        StringWriter sw = new StringWriter();
        JAXBContext context = JAXBContext.newInstance(obj.getClass());
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.marshal(obj, sw);
        return sw.toString();
    }
}

2. 模拟资源文件数据SqlList.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sqls>
    <sql>
        SELECT 1
        WHERE 1 = 1
    </sql>
    <sql>
        SELECT 2
        WHERE 2 = 2
    </sql>
</sqls>

3. 实体类SqlXml代码如下:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
 * SqlXml类用于表示XML中的sql元素
 */
@XmlRootElement(name = "sqls")
@XmlType(propOrder = {"sql"})
public class SqlXml {
    private List<String> sql;

    @XmlElement(name = "sql")
    public List<String> getSql() {
        return sql;
    }

    public void setSql(List<String> sql) {
        this.sql = sql;
    }

    @Override
    public String toString() {
        return "SqlXml{" +
                "sql=" + sql +
                '}';
    }
}

4. main方法代码测试:
    public static void main(String[] args) throws Exception{
        // 读取指定文件中的XML内容
        String xmlStr = readFile("sql/SqlList.xml");

        // 将XML字符串转换为SqlXml对象
        SqlXml sqlXml = (SqlXml)convertXmlStrToObject(xmlStr, SqlXml.class);
        System.out.println(sqlXml);

        // 将SqlXml对象转换为XML字符串
        xmlStr = convertObjectToXml(sqlXml);
        System.out.println(xmlStr);
    }

    /**
     * 读取指定文件并返回文件内容
     *
     * @param file 文件路径
     * @return 文件内容字符串
     */
    public static String readFile(String file) {
        StringBuffer sb = null;
        try {
            InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(file);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            sb = new StringBuffer();
            String line = "";
            while ((line = bufferedReader.readLine()) != null) {
                sb.append(line + "\r\n");
            }
            bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

5. 执行结果:
SqlXml{sql=[
        SELECT 1
        WHERE 1 = 1
    , 
        SELECT 2
        WHERE 2 = 2
    ]}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sqls>
    <sql>
        SELECT 1
        WHERE 1 = 1
    </sql>
    <sql>
        SELECT 2
        WHERE 2 = 2
    </sql>
</sqls>


Process finished with exit code 0

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java 中接收 XML 格式的参数并解析 JSONObject 和实体,你可以使用一些第三方库来完。以下是一个示例代码: ```java import org.json.JSONObject; import org.json.XML; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.StringReader; public class XmlParser { public static JSONObject parseXmlToJson(String xml) { int PRETTY_PRINT_INDENT_FACTOR = 4; JSONObject jsonObject = XML.toJSONObject(xml); String jsonOutput = jsonObject.toString(PRETTY_PRINT_INDENT_FACTOR); return new JSONObject(jsonOutput); } public static <T> T parseXmlToEntity(String xml, Class<T> entityClass) throws JAXBException { JAXBContext jaxbContext = JAXBContext.newInstance(entityClass); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader(xml); return (T) unmarshaller.unmarshal(reader); } } ``` 上述代码使用了两个库,一个是 `org.json.XML` 来将 XML 解析为 JSONObject,另一个是 Java 自带的 JAXB(Java Architecture for XML Binding)库来将 XML 解析实体对象。 在 `parseXmlToJson` 方法中,首先将 XML 字符串转换为 JSONObject 对象,然后将其格式化为要求的输出格式。 在 `parseXmlToEntity` 方法中,首先创建一个 JAXBContext 对象,然后创建一个 Unmarshaller 对象,接着使用 StringReader 将 XML 字符串转换为 Reader 对象,最后使用 unmarshaller 对象将 Reader 转换实体对象。 你可以根据自己的需求调用这两个方法来解析 XML 参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公子乂

你的鼓励是我创作的大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值