HTML文档中的位置或偏移量的含义文档文本
我试图了解位置/偏移量在 中是如何工作的。此处描述了位置/偏移语义。我的解释是,这些是由.HTMLDocument
HTMLDocument
<html>
<head>
<title>An example HTMLDocument</title>
<style type="text/css">
div { background-color: silver; }
ul { color: red; }
</style>
</head>
<body>
<div id="BOX">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</div>
</body>
</html>
当我在浏览器中打开这个HTML时,我只看到“第1段”和“第2段”(没有前导空格或换行符)。因此,我认为“第1段”从偏移量开始。0
但请考虑以下代码,其中我打印示例 HTML 中的文本和正文的偏移量:
import java.io.StringReader;
import javax.swing.text.Element;
import javax.swing.text.html.*;
public class Test {
public static void main(String[] args) throws Exception {
String html = " <html>\n"
+ " <head>\n"
+ " <title>An example HTMLDocument</title>\n"
+ " <style type=\"text/css\">\n"
+ " div { background-color: silver; }\n"
+ " ul { color: red; }\n"
+ " </style>\n"
+ " </head>\n"
+ " <body>\n"
+ " <div id=\"BOX\">\n"
+ " <p>Paragraph 1</p>\n"
+ " <p>Paragraph 2</p>\n"
+ " </div>\n"
+ " </body>\n"
+ " </html>\n";
HTMLEditorKit htmlKit = new HTMLEditorKit();
HTMLDocument doc = (HTMLDocument) htmlKit.createDefaultDocument();
htmlKit.read(new StringReader(html), doc, 0);
System.out.println("doc length: " + doc.getLength());
String text = doc.getText(0, doc.getLength());
System.out.println("doc text, surrounded by quotes, with newlines replaced with /: \""
+ text.replace('\n', '/') + "\"");
Element element = doc.getDefaultRootElement().getElement(1);
System.out.println("element name: " + element.getName());
int offset = element.getStartOffset();
System.out.println("offset of body: " + offset);
}
}
输出:
doc length: 26
doc text, surrounded by quotes, with newlines replaced with /: " /Paragraph 1/Paragraph 2"
element name: body
offset of body: 3
基本问题:为什么“第1段”(正文的开头)在索引处?文本的前三个字符(两个空格和一个换行符)来自哪里?我是否误解了“偏移”的含义?3
挑战问题:给定一些HTML(简单到可以通过检查完全理解),我如何手动严格计算出所有DOM元素的偏移量?
更多信息:
如果我从 HTML 中删除标记,我会得到相同的结果(正文偏移量 )。如果我也去掉 ,我得到一个身体偏移。如果我最终完全移除,我会得到一个身体偏移(如预期)。所以显然贡献0,贡献2,并贡献1的身体偏移?这背后的原因是什么?style
3
title
1
head
0
style
title
head
这似乎也不受 HTML 字符串中空格的影响。