【问题标题】:Java parse .dat file values for configurable htmlJava 为可配置的 html 解析 .dat 文件值
【发布时间】:2021-04-19 23:05:36
【问题描述】:

我有一个带有自定义 php 配置方案的 html,我正在尝试将 html 变量替换为位于 .dat 文件中的相应值。我已经设法将所有 .dat 键值内容存储在哈希图中,但是我似乎无法在不替换一些 html 的情况下替换标签,因为中间有空格而替换标签,或者根本没有替换任何内容。我想要的只是用它们对应的值替换所有键并删除所有未使用的标签。有人可以帮我解决这个问题吗?他们是在 Android 中更简单的方法吗?

这是我的java代码

 String replaceDatTags(String html){

        Log.i(TAG, "In replaceDatTags");
        ArrayList<String> tags = new A

rrayList<>(),
            values = new ArrayList<>();
            BufferedReader reader = null;
    
            try {
                reader = new BufferedReader(
                        new InputStreamReader(mContext.getAssets().open("fullReceipt.dat"), "UTF-8"));
                String line = reader.readLine(); // first tag is the [Values] this one is skiped
                while ((line = reader.readLine()) != null) {
                    tags.add(line.substring(0, line.indexOf("=")));
                    values.add(line.substring(line.indexOf("=")+1, line.length())); // get .dat variable value
    
                }
            } catch (Exception e) {
                e.getMessage();
            } finally {
                try {
    
                    if (reader != null)
                        reader.close();
                } catch (Exception e2) {
                    e2.getMessage();
                }
            }
    
            html = html.replaceAll("\n", "");
            html = html.replaceAll("\t", "");
            html = html.replaceAll("<\\?var ", "");
            html = html.replaceAll("\\?>", "");
            html = html.replaceAll("<\\?ifnexist", "");
            html = html.replaceAll("<!--" , "");
            html = html.replaceAll("-->", "");
            html = html.replaceAll("<\\?ifneq" , "");
            //html = html.replaceAll(" ", "");
    
           for(int i = 0; i < tags.size(); i++){
    
               if(values.get(i).equals("false")){
                   html = html.replace(tags.get(i), "");
               }
    
               else
                    html = html.replace(tags.get(i), values.get(i));
           }
    
            for(int i = 0; i < tags.size(); i++){
    
                html = html.replace(tags.get(i), ""); // delete remaining tags that are floating around
            }
    
            html = html.replaceAll("true", "");
            html = html.replaceAll("false", "");
    
            return html;

HTML 示例

   <body style="width: 100%; margin-right: 2px; margin-left: 2px;">
        <div id="header" style="visibility: visible; text-align:center;font-size:16px; font-weight:bold; ">
            <table border="0" style="width: 100%;">
                <tr>
                    <td width="25%"></td>
                    <td width="25%"></td>
                    <td width="25%"></td>
                </tr>
                <tr>
                    <td colspan="3" align="center">
                        <img src="<?var header_logo ?>" width="50%" />
                    </td>
                </tr>
                <tr>
    ....


    <?ifnexist header_user  <!-- ?>
                <tr>
                    <td colspan="3" align="left" style="font-weight: bold;white-space: nowrap">
                        <br>
                        <i>
                            <p> USER:
                                <?var header_user?>
                            </p>
                        </i>
                    </td>
                </tr>
                <?ifnexist header_user --> ?> 
...

<td align="right" width="45%">
                        <?ifneq header_show_inv_num true <!-- ?>
        

            TRACE:
                    <?var header_trace_nbr?>
                    <?ifneq  header_show_inv_num true --> ?>
                </td>

.dat 文件示例

[value]
header_logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAKKADAAQAAAABAAAAKAAAAABZLkSWAAADcElEQVRYCe2XL5iNQRTGd61HoSgUxZYVKBT9qsi2oihUBMkKBJspCplCoKxCEZDJCJKkeH/3uWf2zNwz39zvfveusud53mf+nTnzzpkzZ75vZWVfhnlgdcD0w5p7XjgtrE+gIsk31X4KX4SPwg+ht8xDcKRVLgmQ6iMQfiW86zOpD8EzMnxFoBwieHJbwLNNmZXgNVm63LTWT+Gt1CHaKS2CxNmW0Pc4Oxd1gxz7HeGP68uqa1krbyybHKsdFc4K74W/wpR0EXwk7UV57oVsPRVOCZDyYiTf+E6r1whelwIpZFHyVYZ2JoBQuXH6jgifhEwigtzSG5nW8AYEubUc4weB/Mg6hwSTDVXQYyxJdEk4iuNJI69gnFw2U4rIp0618OIt4aQbIQWRMZKUHhxp5EIazSuP1XwmZDvMVXq1fksbD3JJTDhm7H+3joNWmZS8EJEQ5P4F4HnrI7+kXD51JP3NwAhOSmt5ghxrGbzMZ0fPqUjmTT1s0GywDrkvWkvd49hEZ7yhA/RMpHZriTsTYqZm2HS6StYgVFo20gl5gj5Y/SI+y9c24fWjOrYJ/rsCcdaS9N77Iz7WmjVgPNoYoVNbM/V7DybWA4jMOpUYvCqQsiJJXDzBSHFZfZZHfXyHa/0vgiGZqLMPQVLMnou/JLg9nb1jclF1clIU6E5toVULgRVPsPaEkRbIf14s9SzLq4mLP+L0/nkmQZ3ddd3AYErWlRZX73o2sttIHvQEmzdK83myOj/Rd9eo1uzJQyG9GIU2n11j8UdMnOHF6EXhSO8LaWeqo+/bajaFvGeOwHtRXGNz/A5jzROk/VIo4w3StwWLO1XHwhdH+uqY9M1aELs3K8qZTX/E6DPoY4S+z0JJjv55hUyxJUTxx9oZwdVgFTPghzgWvkI8UfRqMeTn+jpHGhEzHeI7C5uIIMr8NJUfr8QFO+dfFtkU+OhclBCfT0pj5RHbODetTDt8RG4LJXGbM6TEa1PkMLhWscrf145wTuCX0At9HNMJAdJDBUfcE1hzSmpHbIrctgdClHpMZ0iJ50hfPrYzezUPmhK7ei3w3G1Y54JKYu6hEHrO1mh50PQoubXkyPS1S+ccQiohI+C9pvQhaMZGqgAI9xEIkeOyPNcyMA9Bs8kFIQ9CFK+WhCGEtyh5W9Pzpfq+7JkH/gHV/os9p6RNLQAAAABJRU5ErkJggg==
header_date=10/08/2016
header_time=14:23

【问题讨论】:

    标签: java html parsing


    【解决方案1】:

    最终创建了一个 HTMLBuilder 类,该类按块构建收据,更改了 dat 文件,使其包含 HTML 块,并使用替换标记和 stringbuilder 对象替换为相应的 HTML 块和常量。

    private HashMap<String, String> config = getDatTags();
    private StringBuilder htmlBuilder = new StringBuilder("");
    
    public String buildReciept(){
    
            Log.i(TAG, "got dat tags");
    
            buildHeader();
            buildBody();
            buildFooter();
    
            return htmlBuilder.toString();
        }
    

    我如何在 buildHeader()、buildBody() 和 buildFooter() 方法中按块构建收据

     htmlBuilder.append(config.get("IPE_RECEIPTDATA_HEAD"));
     htmlBuilder.replace(htmlBuilder.toString().indexOf("<replace>"),htmlBuilder.toString().indexOf("<replace>")+9 ,config.get("HEADER_MERCHANT_NAME"));
        ...
    

    .dat 文件键值对

    [value]
    IPE_RECEIPTDATA_HEAD_LINE_DATA5=<div id="AutCode"><div id="ACODE"><div class="label">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 2021-06-16
      相关资源
      最近更新 更多