仅使用标准 java api(缩进和 Doctype 定位)即可漂亮地打印 javax.xml.transform.Transformer 的输出

2023-11-30

使用以下简单代码:

package test;

import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class TestOutputKeys {
    public static void main(String[] args) throws TransformerException {

        // Instantiate transformer input
        Source xmlInput = new StreamSource(new StringReader(
                "<!-- Document comment --><aaa><bbb/><ccc/></aaa>"));
        StreamResult xmlOutput = new StreamResult(new StringWriter());

        // Configure transformer
        Transformer transformer = TransformerFactory.newInstance()
                .newTransformer(); // An identity transformer
        transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "testing.dtd");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.transform(xmlInput, xmlOutput);

        System.out.println(xmlOutput.getWriter().toString());
    }

}

我得到输出:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Document comment --><!DOCTYPE aaa SYSTEM "testing.dtd">

<aaa>
<bbb/>
<ccc/>
</aaa>

问题A:doctype标签出现在文档注释之后。是否可以让它出现在文档注释之前?

问题 B:如何仅使用 JavaSE 5.0 API 实现缩进? 这个问题本质上是相同的如何从 java 漂亮地打印 xml, however该问题的几乎所有答案都依赖于外部库。唯一适用的答案(由名为 Lorenzo Boccaccia 的用户发布)仅使用 java 的 api,基本上等于上面发布的代码,但对我不起作用(如输出所示,我没有缩进)。

我猜你必须设置用于缩进的空格量,就像外部库的许多答案所做的那样,但我只是找不到在 java api 中指定的位置。鉴于 java api 中存在将缩进属性设置为“yes”的可能性,因此必须能够以某种方式执行缩进。我就是不知道怎么办。


缺少的部分是缩进量。您可以按如下方式设置缩进和缩进量:

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(xmlInput, xmlOutput);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅使用标准 java api(缩进和 Doctype 定位)即可漂亮地打印 javax.xml.transform.Transformer 的输出 的相关文章

随机推荐

  • 在 Android 中将视频上传到 Facebook

    Problem 我的视频没有上传到 Facebook Question 如何将视频上传到 Facebook Note 我可以从我的画廊上传图片 没有Exceptions被抛出 我认为线路有问题 params putString filena
  • 同源策略和 CORS - 有什么意义?

    我在理解同源策略和 解决 它的不同方法时遇到了一些困难 显然 同源策略是作为一种安全措施而存在的 因此来自服务器 域的脚本无法访问来自另一服务器 域的数据 同样清楚的是 有时 能够打破此规则是有用的 例如 混搭应用程序访问来自不同服务器的信
  • AJAX 返回带有输出的 HTML 代码

    尝试了一些解决方案后this和许多其他问题我无法弄清楚我的代码中的确切问题是什么 我的代码 document ready function botname blur function ajax type POST url tukaiexot
  • vscode g++ 找不到 .cpp 定义文件

    我正在尝试使用多个 cpp 和 hpp 文件编译 C 示例 但 g 找不到任何成员函数定义 主要 cpp include
  • 从 wagtail 外部上传 Wagtail 图像

    在无法子类化的 Django 模型中Page 我想转换现有的 ImageField 以使用 Wagtail 图像 我将该字段重新定义为 avatar models ForeignKey wagtailimages Image null Tr
  • 多个计数器的联合

    查找列表并集的最佳方法是什么 就可读性和效率而言 Counters 例如 我的列表可能如下所示 counters Counter a 6 b 3 c 1 Counter a 2 b 5 Counter a 4 b 4 我想计算并集 即cou
  • 返回 Javascript 文件中定义的所有函数

    对于以下脚本 如何编写一个函数以数组形式返回所有脚本函数 我想返回脚本中定义的函数的数组 以便我可以打印脚本中定义的每个函数的摘要 function getAllFunctions this is the function I m tryi
  • IE - 本地和远程部署的系统之间的行为差​​异

    我在 IE 中遇到有线问题 当我浏览本地部署的 asp net mvc 应用程序时 一切都按预期工作 当我浏览部署在不同主机上的系统时 会出现一些恼人的差异 在这两种情况下 我都使用本地安装在我的主计算机上的同一个 IE 实例 假设我在cs
  • “AttributeError:部分初始化的模块‘pytube’没有属性‘YouTube’(很可能是由于循环导入)”[重复]

    这个问题在这里已经有答案了 这是代码 import pytube as p video url input Enter the link youtube p YouTube video url filters youtube streams
  • 无法删除终端中的特殊命名文件

    有些程序使我的根目录成为虚拟文件 例如 1 2 3 n 我运行失败 rm 1 and too rm 1 终端认为 1 是选项 如何删除这些文件在终端 您可以使用rm 1 指当前目录 并且由于参数不以破折号开头 因此不会将其解释为选项
  • Java 中忽略 SIGINT

    我正在为 Unix 上的本机共享库使用 Java 包装器 JRI 本机库 R 的基于 C 的 REPL 实现 在内部处理 SIGINT 使用 Java 包装器时 当我使用以下命令向进程发送 SIGINT 时 Java 应用程序将退出 杀死
  • 如何将不支持的密码套件(不包含在默认密码套件中)添加到客户端问候消息

    要求客户端应支持以下TLS加密密码套件 private String cipherSuites new String TLS DHE RSA WITH AES 256 GCM SHA384 TLS DHE RSA WITH AES 256
  • CloudBlockBlob.DownloadToStream 与 DownloadRangeToStream

    尝试使用 ASP NET azure SDK 从 blob 存储下载图像 我在另一篇文章中读到 DownloadToStream 确实将 blob 分解成更小的块并并行下载它们以提高性能 我相信这就是 DownloadRangeToStre
  • JVM 和 HotSpot 之间的区别?

    HotSpot 到底是什么 它与 JVM 和 OpenJDK 有何关系 这是图书馆吗 它到底有什么作用 另外 OpenJDK 和 HotSpot 有什么区别 Java 虚拟机的确切定义在Java虚拟机规范 JVM 根据定义是虚拟机 即模拟真
  • θ(n) 和 O(n) 有什么区别?

    有时我会看到 n 带有奇怪的 符号 中间有一些东西 有时只是 O n 这只是因为没有人知道如何输入这个符号而懒得打字 还是它有不同的含义 简短说明 如果算法的大小为 g n 则意味着随着 n 输入大小 变大 算法的运行时间与 g n 成正比
  • Kotlin RC NoClassDefFoundError

    将 kotlin 更新到 RC 1036 后 我面临一个奇怪的问题 我的代码甚至没有编译和打包 当构建通过并且应用程序启动时我得到ClassNotFoundException Didn t find class example myappl
  • 查看任务的活动堆栈

    我刚刚开始开发一个简单的 Android 应用程序 同时我仍在学习该平台 我正在使用带有 ADT 插件 0 9 6 的 Eclipse IDE 我需要知道是否可以查看Activity与任务关联的堆栈 有没有办法通过 DDMS 工具或任何其他
  • 从 UIAlertView 获取文本

    似乎缺少了一些东西 但是下面的代码正在生成nil两者的值title and title1 即使它正确启动正确的警报类型并且不指示任何警告或错误 这种实施可能存在什么问题UIAlertView UIAlertView alert UIAler
  • 使用 MOSS Web 服务的 SharePoint 文档的权限

    我们需要检索对文档具有读取权限的用户组 我们知道文档的 URL 以下权限服务提供具有访问权限的组 但它需要站点 URL 或列表 URL 我们有一个文档 URL 是否有任何其他服务提供文档的权限 或者 如果我们知道文档 URL 是否有办法找到
  • 仅使用标准 java api(缩进和 Doctype 定位)即可漂亮地打印 javax.xml.transform.Transformer 的输出

    使用以下简单代码 package test import java io import javax xml transform import javax xml transform stream public class TestOutpu