我想使用带有XML
文档的SGML
解析器,但这不起作用。在阅读了一些建议后,似乎只能使用HTML
解析器。所以我基本上只是尝试做一个简单的查询,从我的文档中提取故事标题。 (如果我解析为null,则会起作用 - 打印整个文档,我不知道如何访问特定标记,例如标题)。
public static void main(String[] args){
Parser parser = new Parser(xmlFile.getAbsolutePath());
NodeList list = parser.parse (new HasAttributeFilter ("id","title"));
Node node = list.elementAt(0);
if (node instanceof TagNode) {
TagNode meta = (TagNode) node;
String description = meta.getAttribute("title");
System.out.println(description);
}
}
启动SGML文件:
<head>
<meta words=61 rate=180>
<formname>Testing</formname>
<storyid>1234</storyid>
</head>
<story>
<fields>
<f id=title>Sports</f>
<f id=modify-by>Tester</f>
<f id=modify-date>315576000</f>
</fields>
<body>
答案 0 :(得分:1)
从您的示例看,您的内容模型似乎非常简单。在这种情况下,您可以实现一个简单的临时解析。
如果您非常确定未使用标记的部分(不仅因为CDATA部分,还因为可以在参数实体中给出status关键字,这会使一切变得复杂),以及SGML的深奥特征(例如如果没有使用DATATAG),您可以删除任何注释,然后扫描以下模式:
(?i)<f\s+id\s*=\s*["']?title["']?\s*>
假设f具有单个属性id(并且start-tag未被最小化,因为它可以是未闭合的或网络启用的),这将留在内容的开头。然后扫描到“&lt;”,然后瞧瞧。
当然,更灵活的东西当然需要一个SGML解析器。