如何调用 DaisyDiff 来比较两个 HTML 文件?

2024-01-12

我需要在我的应用程序中创建两个 HTML 文档之间的差异。我发现一个名为 DaisyDiff 的库可以做到这一点。它有一个如下所示的 API:

/**
 * Diffs two html files, outputting the result to the specified consumer.
 */
public static void diffHTML(InputSource oldSource, InputSource newSource,
                            ContentHandler consumer, String prefix, Locale locale)
        throws SAXException, IOException

我对 SAX 一无所知,而且我不知道该传递什么作为第三个参数。翻阅之后https://code.google.com/p/daisydiff/source/browse/trunk/daisydiff/src/java/org/outerj/daisy/diff/Main.java https://code.google.com/p/daisydiff/source/browse/trunk/daisydiff/src/java/org/outerj/daisy/diff/Main.java我写了这个方法:

@Override
    protected String doInBackground(String... params)
    {
        try {
            String oldFileName = params[0],
                    newFileName = params[1];
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            FileInputStream oldis = null, newis = null;
            oldis = openFileInput(oldFileName);
            newis = openFileInput(newFileName);

            SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory
                    .newInstance();

            TransformerHandler result = tf.newTransformerHandler();
            result.setResult(new StreamResult(os));
            DaisyDiff.diffHTML(new InputSource(oldis), new InputSource(newis), result, "", Locale.getDefault());

            Log.d("diff", "output length = " + os.size());
            return os.toString("Utf-8");

        }catch (Exception e){
            return e.toString();
        }
    }

我不知道这是否有意义。它不起作用,没有任何内容写入输出。请在这件事上给予我帮助。提前致谢。


根据如何HtmlTestFixture.diff已编码(内部src/test/java of DaisyDiff,您需要向其提供有关如何格式化结果的说明。您是否尝试过添加以下内容setOutputProperty(...) calls?

@Test 
//@Test comes from TestNG and is not related to DaisyDiff
public void daisyDiffTest() throws Exception {
    String html1 = "<html><body>var v2</body></html>";
    String html2 = "<html>  \n  <body>  \n  Hello world  \n  </body>  \n  </html>";

    try {
        StringWriter finalResult = new StringWriter();
        SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); 
        TransformerHandler result = tf.newTransformerHandler(); 
        result.getTransformer().setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
        result.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes"); 
        result.getTransformer().setOutputProperty(OutputKeys.METHOD, "html"); 
        result.getTransformer().setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
        result.setResult(new StreamResult(finalResult)); 

        ContentHandler postProcess = result; 
        DaisyDiff.diffHTML(new InputSource(new StringReader(html1)), new InputSource(new StringReader(html2)), postProcess, "test", Locale.ENGLISH);
        System.out.println(finalResult.toString());
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

这样做,我的输出如下。现在我可以将其粘贴到 HTML 文件中,包含正确的 css 和 js 文件并获得漂亮的输出。

<span class="diff-html-removed" id="removed-test-0" previous="first-test" changeId="removed-test-0" next="added-test-0">var v2</span><span class="diff-html-added" previous="removed-test-0" changeId="added-test-0" next="last-test"> </span><span class="diff-html-added" id="added-test-0" previous="removed-test-0" changeId="added-test-0" next="last-test">Hello world </span>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调用 DaisyDiff 来比较两个 HTML 文件? 的相关文章

  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • 寻找 WebElements,最佳实践

    在我们当前的自动化 使用 Selenium WebDriver Java 中 我们使用 FindBy very广泛地 例如 FindBy css a name bcrumb protected List
  • JPA 为每个项目选择最新实例

    假设我有一个会议实体 每次会议都有一个与会者和一个会议日期 在我的会议表中 我可能为每个与会者举行多个会议 每个会议都有不同的日期 我需要一个 JPA 查询 该查询将为所有与会者仅选择最新的会议 例如 如果我的桌子看起来像这样 Meetin
  • 将位于 jar 中的文件读取为 java.io.File 对象

    与此类似的问题已发布 但似乎没有一个答案对我的情况有帮助 我正在编写一个程序包 它使用 Google 的凭据来获取 Google Apps 用户 为此 我使用服务帐户 因此为了检索凭据 我需要提供 除其他外 一个 p12 签名文件 Cred
  • 如何使用java避免Mysql数据库中的“数据因列被截断”?

    在我的 Java 程序中 Hibernate Bean 类定义一列 例如 TimtableVO java Column name REPEAT DAYS private WeekdayType repeatDays hear Weekday
  • dompdf:找不到图像或类型未知

    这是我的代码 我几乎尝试了所有在 PDF 上显示图像的方法 但仍然不起作用 你能帮我解决这个问题吗 我还将 DOMPDF ENABLE REMOTE 设置为 true 结果仍然相同 require once dompdf autoload
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • 带 CSS 网格的等宽侧边栏列

    是否可以让左右列具有相同的宽度 而中间列占据剩余空间 我不想设置像这样的百分比grid template columns 20 60 20 因为并不总是确定这些列的内容是什么 Flexbox 和表格似乎没有解决这个问题的方法 所以我再次尝试
  • 使用 eclipse 配置mockito 时出现问题。给出错误:java.lang.verifyError

    当我将我的mockito库添加到类路径中 并使用一个简单的mockito示例进行测试时 我尝试使用模拟对象为函数add返回错误的值 我得到java lang verifyerror 以下是用于测试的代码 后面是 logcat Test pu
  • Ubuntu 的打包 - Web 应用程序

    Web 应用程序没有与 C 或类似文件不同的 make 文件 但是 它需要放置在特定的目录中 例如 var www 我是 Linux 打包新手 所以我的问题是 如何将我的应用程序打包到 deb 中 以便在安装时将其放入 etc myprog
  • 点击问题:动态生成的链接不触发点击功能

    下面是两个代码片段 由于某种原因什么也没有发生 但来自同一个 JS 文件的其他 jQuery 函数在带有 UL 的页面上执行得很好 这是在盯着我看吗 ul class paganation li 1 li li a href 2 a li
  • Apache HttpClient 执行时会在所有 HTTP 5XX 错误上抛出 IOException 吗?

    The Apache HttpClient 文档 http hc apache org httpcomponents client ga httpclient apidocs org apache http client HttpClien
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • Restful WS 中的 WSDL 等价物是什么?如果没有,消费者如何生成所需的客户端类?

    比如说 我在java中有生产者 在 net中有消费者 生产者有一个方法 需要 员工作为方法参数并在数据库中创建员工 对于基于 SOAP 的 ws dot net 客户端将调用 WSDL 并创建存根 包括 dot net 中的员工数据表示 现
  • 当另一个线程发生事情时从主线程获取数据?

    目前我有一个线程正在运行一个侦听连接的套接字 当它收到连接时 它需要上传在主线程中收集的数据 即从主线程获取数据 但是 我传递了对象的实例 但它从未使用等待连接时收集的数据进行更新 有没有正确的方法来做到这一点 我用谷歌搜索了一下 似乎找不
  • 使用 JavaScript 的计时器

    我想使用java脚本实现计时器 我想随着间隔的变化而减少计时器 Example假设我的计时器从 500 开始 我想要根据级别减少计时器 例如1 一级定时器应减1 且递减速度应较慢 2 2级定时器应递减2 递减速度应为中等3 3级定时器应减3
  • Java 8 Stream - 为什么过滤器方法不执行? [复制]

    这个问题在这里已经有答案了 我正在学习使用java流进行过滤 但是过滤后的流没有打印任何内容 我认为过滤器方法没有被执行 我的过滤代码如下 Stream of d2 a2 b1 b3 c filter s gt s startsWith b
  • Excel 类似 HTML 表格,可在 x 轴(完整表格)和 y 轴(标题固定)上滚动

    我想建立一个具有固定宽度列的表格 在大多数情况下 表数据会水平和垂直溢出 如果列的宽度大于视图宽度 则需要水平滚动条来滚动并查看所有表列 同时滚动标题和数据 如果数据的高度大于可用视图 则会出现垂直滚动框 但在滚动时保持标题固定 以便用户关
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • 用于从链表中删除元素的大 O 表示法[重复]

    这个问题在这里已经有答案了 我正在阅读有关链接列表的内容 我发现 从链表中删除所需的元素需要 O n 运行时间 其中 n 是元素的数量 列表中的元素 http www cs mcgill ca dprecup courses IntroCS

随机推荐

  • Pickling cv2.KeyPoint 会导致 PicklingError

    我想搜索给定目录中所有图像中的冲浪并保存它们的关键点和描述符以供将来使用 我决定使用pickle 如下所示 usr bin env python import os import pickle import cv2 class Frame
  • 如何在 html 中使用纯 javascript 切换类

    我有一个 div 我想在悬停时切换它的类 这是我的代码 function a this classList toggle first this classList toggle sec document querySelector cont
  • 如何将 R 历史记录中指定行数保存到文件中?

    这有点令人沮丧 但我确信有一个简单的答案 history max show N 将在终端上显示 N 行历史记录 savehistory file 将根据某些环境变量将多行历史记录保存到文件中 我想做的是 savehistory file m
  • 如何在Python中使用paramiko库发送箭头键?

    我正在使用 python 2 7 和代码 ssh 客户端paramiko图书馆 我用myhost channel send chr keycode 将每个键码发送到服务器 但它仅适用于 1 字节键码 我想发送其他多字节键码 例如箭头键 我怎
  • 在 Android 网页中禁用输入焦点缩放

    这是一个困境 我有一个网页 仅适用于 Android 设备 在该页面中我有一个输入框 特别是文本框 当它获得焦点时 浏览器会放大 我不希望它放大 声音容易 对吧 这就是有趣的地方 我必须能够总体缩放 所以不要说 那对我不起作用 另外 输入框
  • 控制反转和 RAII 可以一起发挥作用吗?

    我刚刚阅读了有关控制反转 IOC 的内容 这让我很困扰 它似乎让内存管理变得很痛苦 当然 ioc 似乎主要用于垃圾收集环境 Net Java Scripting 而我关心的是非 gc 设置 我在这里担心的是 IOC 在某种程度上违背了 RA
  • 检查链表的循环性[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要一个方法 该方法将链表作为参数
  • Facebook 页面嵌入不适用于任何浏览器中的 iFrame

    当我尝试使用嵌入 Facebook 页面时出现错误Facebook Page Plugin https developers facebook com docs plugins page plugin https developers fa
  • 直接下载 OneDrive 文件的链接吗?

    OneDrive 可共享链接如下所示 https 1drv ms w s AqmFiI7maXrRgT7PGcK 7JyZlBco https 1drv ms w s AqmFiI7maXrRgT7PGcK 7JyZlBco 如何获得此版本
  • 匹配时如何不借用期权?

    我有以下代码 fn remove descendent mut self key K gt Option
  • 是否可以在不使用 IE 开发工具的情况下更改浏览器模式?

    我们的应用程序在 IE7 和 IE8 中运行良好 我们使用X UA Compatibleheader 强制浏览器使用 IE7 标准文档模式 这是关于在得到图片后将使用哪个渲染引擎 然而 在 IE9 中 有很多东西停止工作 在IE9中 文档模
  • 使用 Windows 身份验证作为 Intranet 应用程序的登录凭据

    我正在使用 PHP 开发一个 Intranet Web 应用程序 我正在尝试使用 Windows NT 登录凭据登录到该应用程序 我在这里遇到的麻烦是如何获取远程用户的 Windows 用户名 我想要获取用户名 然后检查各个 LDAP 组
  • 如何在remoteViews中使用Glide?

    我正在使用 Glide 从服务器加载所有图像 但我正在尝试以正确的方式将它们设置为通知和 RemoteControlClientCompat 带有锁定屏幕的很酷的东西 我正在开发一个音乐播放器 因此每次更改歌曲时 通知中的歌曲封面都必须更改
  • Keras 模型预测 NaN

    我正在尝试为我的二元分类问题训练一个模型 我的数据有 91 列和 50 000 行 其中一列是我的二进制目标变量 所有其他列也是数字 这是我尝试训练的方式 model Sequential model add Dense 20 input
  • 在sqlite中查找重复的列值

    我在表中插入了一些值DataTab SomeId Integer gt Autogenerated primary key DataId Guid DataNumber Integer DataType varchar 上面是我的表中的列
  • 向 RLMObject 添加主键需要迁移,有什么想法吗?

    我正在开发一个 iOS 应用程序 使用 Realm io 作为持久存储 我刚刚通过添加主键更新了我的自定义 RLMObject 子类之一 当我运行该应用程序时 出现错误 告诉我需要添加迁移步骤 Migration is required f
  • Rails 3 - 将参数传递给自定义验证方法

    我希望将一个值传递给自定义验证 我做了以下测试 validate print out parameter1 gt Hello 有了这个 def print out input blank puts input end 创建对象或保存对象时
  • jQuery Remotipart 发送 [object Object] 到服务器

    我正在尝试使用 ajax 将文件上传到我的 Rails 应用程序 为了促进这一点 我已经包括了jQuery remotipart gem https github com JangoSteve remotipart app assets j
  • Powershell错误处理:如果没有发生错误则执行某些操作

    我一直在寻找这个 但似乎找不到 我有一个带有 try catch 语句的脚本 如果没有发生错误 我想添加一个操作 Eg try something catch Error occured if error No Error Occured
  • 如何调用 DaisyDiff 来比较两个 HTML 文件?

    我需要在我的应用程序中创建两个 HTML 文档之间的差异 我发现一个名为 DaisyDiff 的库可以做到这一点 它有一个如下所示的 API Diffs two html files outputting the result to the