- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 Java 美化/缩进一些 XML:
<div xml:space="default"><h1 xml:space="default">Indenting mixed content in Java</h1><p xml:space="preserve">Why does indenting mixed content (like this paragraph) add whitespace around <a href="http://www.stackoverflow.com" xml:space="preserve"><strong>this strong element</strong></a>?</p></div>
当我美化XML时,我不希望<a>
的内容中添加空格。元素,所以我指定了 xml:space="preserve"
希望变压器保留其中的空白。
但是,当我转换 XML 时,我得到:
<div>
<h1 xml:space="default">Indenting mixed content in Java</h1>
<p>Why does indenting mixed content (like this paragraph) add whitespace around <a href="http://www.stackoverflow.com">
<strong xml:space="preserve">this strong element</strong>
</a>?</p>
</div>
... <a>
之间有额外的空格和 <strong>
元素。 (不仅如此,</a>
关闭标记与它的开放标记也笨拙地不一致。)
如何防止美化器添加空白?难道我做错了什么?这是我正在使用的 Java 代码:
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import java.io.ByteArrayInputStream;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import java.io.StringWriter;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.stream.StreamResult;
public class XmlExample {
public static void main(String[] argv) {
Document xmlDoc = parseXml("<div xml:space=\"default\">" +
"<h1 xml:space=\"default\">Indenting mixed content in Java</h1>" +
"<p xml:space=\"preserve\">Why does indenting mixed content (like this paragraph) add whitespace around " +
"<a href=\"http://www.stackoverflow.com\" xml:space=\"preserve\"><strong>this strong element</strong></a>?" +
"</p>" +
"</div>");
String xmlString = xmlToString(xmlDoc.getDocumentElement());
System.out.println(xmlString);
}
public static Document parseXml(String xml) {
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new ByteArrayInputStream(xml.getBytes("UTF-8")));
return doc;
}
catch(Exception e) {
throw new RuntimeException(e);
}
}
public static String xmlToString(Element el) {
try {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
StringWriter writer = new StringWriter();
DOMSource source = new DOMSource(el);
transformer.transform(source, new StreamResult(writer));
return writer.getBuffer().toString().trim();
}
catch(Exception e) {
throw new RuntimeException(e);
}
}
}
最佳答案
如果您使用符合 XSLT 1.0 或 XSLT 2.0 规范的序列化程序,那么它应该尊重 xml:space (即,在 xml:space="preserve"的范围内,应该抑制缩进)。 XSLT 2.0 规范在这一点上比 XSLT 1.0 更加明确,并且使其成为“必须”而不是“应该”的要求。
您正在使用 JAXP 身份转换而不是 XSLT 转换; JAXP 规范中有对 XSLT 1.0 规范的引用,但它有点模糊。
如果您使用 Saxon,您应该会得到所需的行为。 Saxon 还允许您使用 SUPPRESS_INDENTATION 输出参数抑制特定元素的缩进,因此您甚至不必在正在序列化的文档中包含 xml:space。
关于java - Java 中的缩进 XML 是否应该遵守 `xml:space="保留“`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17053091/
我正在使用 libxml2 的 xmlwriter api 编写一个 xml 文件。 当我使用记事本打开文件时,缩进不正确。 有人知道怎么解决吗? 非常感谢。 最佳答案 我在这里有点冒进,但我会说“缩
我正在尝试让这个脚本工作,但它...给我缩进错误 #!/usr/bin/env python import io myfile = open('stats.txt', 'r') dan = myfil
我使用 Emacs 有一段时间了,我真的很想念一个古老的 Geany 快捷方式 - “C-i”和“C-u”。 “C-i”缩进整个当前行(将鼠标光标保持在原处),“C-u”取消整个当前行的缩进。 我发现
如何向 UILabel 内的文本添加缩进或偏移?它需要是特定的像素大小,与字体大小无关。 最佳答案 您可以创建另一个UILabel,然后将每个标签的框架设置为一定的宽度,这样,如果您想要实现这一目标,
请帮我在 Emacs haskell-mode 中设置正确的缩进 当我尝试输入诸如 ADT 或记录之类的内容时,按 后我进入了错误的列。 ,然后按 不会切换到右边,直到我输入 |或者 ';'! d
我在 Visio 2010 中有一个项目符号列表,我试图在其中缩进二级项目符号。例如: 我希望“子项目符号”项目向右缩进,这样很明显它是一个子元素。我认为功能区上的“增加缩进”选项可以做到这一点,但这
我写了这段代码: addNums key num = add [] key num where add res a:as b:bs | a == [] = res
我在生成的 xml 文档中添加了换行符。 "\n" some text etc."\n" "\n" 这最终应该是: some text etc. 这是否可以通过 google-code-pre
使用 JTabbedPane 时,如何缩进选项卡? Swing 默认输出: ------- --------- ------ | A | | B | | C | --------
我收到这些行的缩进错误 有没有在线验证器可以帮助我? showAliveTests : (pageIndex, statusFilter) -> data= pageI
在 Python 中,当你写了 100 行代码而忘记在某个地方添加一堆循环语句时,你会怎么做? 我的意思是,如果您在某处添加一个 while 语句,您现在必须缩进它下面的所有行。这不像您可以戴上牙套并
我喜欢这样做,如 indesign 或 quark...段落缩进...图片 如何在 html 和 css 中做到这一点的正确方法 我不希望文字环绕图像...我喜欢保护整个左边的部分给图片留边距就可以了
我试过添加 10px 的内边距但没有成功。你可以看到它的一个例子lower down on this page . #menu li { float: left;
这个问题在这里已经有了答案: I'm getting an IndentationError. How do I fix it? (6 个答案) 关闭去年。 while 1 == 1:
您好,我正在尝试使用来自 C# 应用程序的收据打印机打印帐单/收据。 预期的输出是这样的: ITEM NAME QTY PRICE Banana Large Y
有没有办法在 JTextPane 中缩进一段文本? import javax.swing.*; import java.awt.*; import javax.swing.text.StyledDoc
我知道 #define 等通常从不缩进。为什么? 我目前正在编写一些代码,其中混合了#define、#ifdef、#else s、#endifs 等。所有这些通常与普通 C 代码混合在一起。 #def
我认为缩进在 YAML 中很重要。 我在 irb 中测试了以下内容: > puts({1=>[1,2,3]}.to_yaml) --- 1: - 1 - 2 - 3 => nil 我期待这样的事情:
我在带有 openmp 语句的 C++ 代码中使用 Vim。 而在我的 ~/.vimrc set ai " auto indent 我的问题:当我使用 openmp 语句(以 # 开头)时,光标会跳
我想使用 Megaparsec 解析一种基本的缩进语言。最初我使用的是 Parsec,我设法通过缩进正常工作,但现在我遇到了一些麻烦。 我一直在关注一个教程here这是我必须解析一种忽略缩进的语言的代
我是一名优秀的程序员,十分优秀!