【问题标题】:How to read and decode base64 data from XML in java如何在java中从XML读取和解码base64数据
【发布时间】:2016-07-25 02:25:53
【问题描述】:

我的列数据采用 Base64 加密的 XML 格式。现在如何读取值

<?xml version="1.0" encoding="UTF-8"?>
<event id="370e7324-3-85ec-63dac16aacb6">
<properties>    
<property enc="BASE64" name="DAV:name" value="Q2FsZWmnmewqzRlYXI="/>
</properties>
</event>

我的java代码是

public Object readingSqlResultedRecord(ResultSet result){
try {
Query q="select xml from empdata";
String xml = result.getString(1);
System.out.println("----xml----"+xml);
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

我想读取这个值 value="Q2FsZWmnmewqzRlYXI=" 有可能吗?

【问题讨论】:

  • 听起来您真正要问的是“如何在 Java 中解析 XML 并从中检索属性?”之后base64部分就很简单了。到目前为止,您在 XML 解析研究中发现了什么?
  • @Jon Skeet.. 是的。我没有开始解析,因为我第一次遇到这个问题所以我不知道如何开始。
  • 好吧,如果您不熟悉在 Java 中解析 XML,我建议您从教程开始。碰巧的是,有很多方法可以在 Java 中解析 XML —— 这在某些方面很方便,但在其他方面则不然。您可能想从 docs.oracle.com/javase/tutorial/jaxp/dom/readingXML.html 开始 - 或者看看 jdom (jdom.org)

标签: java


【解决方案1】:

您将“xml”作为字符串获取,您需要将其转换为 DOM 对象以轻松解析它。

这里有一些链接可以帮助你做你想做的事,

http://www.journaldev.com/1237/java-convert-string-to-xml-document-and-xml-document-to-string

http://www.coderanch.com/t/512978/java/java/convert-string-xml-file-java

java convert string to xml and parse node

简而言之,

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
DocumentBuilder builder;  

builder = factory.newDocumentBuilder();  
Document doc = builder.parse(new InputSource(new StringReader(xmlStr))); 
return doc;

【讨论】:

    【解决方案2】:

    使用 JAXB 进行 xml 解析。

    @XmlRootElement(name="event")
    @XmlAccessorType(value=XmlAccessType.FIELD)
    public class Event
    {
        @XmlAttribute(name="id")
        private String id;
        @XmlElement(name="properties")
        private Event.Properties properties;
    
        @XmlRootElement(name="properties")
        @XmlAccessorType(value=XmlAccessType.FIELD)
        public static class Properties
        {
            @XmlElement(name="property")
            private Event.Property property;
        }
    
        @XmlRootElement(name="property")
        @XmlAccessorType(value=XmlAccessType.FIELD)
        public static class Property
        {
            @XmlAttribute(name="enc")
            private String enc;
            @XmlAttribute(name="name")
            private String name;
            @XmlAttribute(name="value")
            private String value;
        }
    }
    

    创建对应的getter和setter。 那么

    JAXBContext context = JAXBContext.newInstance(Event.class);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    //All the xml data will be mapped into JAXB class instance
    Event event = (Event) unmarshaller.unmarshal("xml_file_path");
    //get the data
    String value = event.getProperties().getProperty().getValue();
    String decodedValue = DatatypeConverter.parseBase64Binary(value);
    

    【讨论】:

    • Event event = (Event) unmarshaller.unmarshal("xml_file_path");中的xml_file_path是什么
    • 绝对或相对 xml 文件路径。 (例如 unmarshaller.unmarshal("/data/event.xml").
    • XML 数据在 xml 对象中,即 String xml = result.getString(1);。所以我可以通过 xml 对象是否正确?
    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多