0

我想对文档使用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>
4

1 回答 1

1

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

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

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

假设 f 具有单个属性 id (并且起始标签未最小化,因为它可能未关闭或启用网络),这使您处于内容的开头。然后扫描直到“<”,然后瞧。

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

于 2013-02-18T12:07:01.847 回答