在SGML中使用HTML Parser

时间:2013-02-14 14:54:57

标签: java html xml html-parsing sgml

我想使用带有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>

1 个答案:

答案 0 :(得分:1)

从您的示例看,您的内容模型似乎非常简单。在这种情况下,您可以实现一个简单的临时解析。

如果您非常确定未使用标记的部分(不仅因为CDATA部分,还因为可以在参数实体中给出status关键字,这会使一切变得复杂),以及SGML的深奥特征(例如如果没有使用DATATAG),您可以删除任何注释,然后扫描以下模式:

(?i)<f\s+id\s*=\s*["']?title["']?\s*>

假设f具有单个属性id(并且start-tag未被最小化,因为它可以是未闭合的或网络启用的),这将留在内容的开头。然后扫描到“&lt;”,然后瞧瞧。

当然,更灵活的东西当然需要一个SGML解析器。