我正在开发基于 Java World Wind 的应用程序,该应用程序使用其中包含的 HTML。我有一个数据库,其中包含所有具有名称、text_description、icon_link 等属性的感兴趣的地方......我的目标是每次单击地球上不同的感兴趣的地方时,用另一个 HTML 文本字符串替换一些文本字符串。所以我需要解析 HTML 文档,搜索关键字并将其替换为数据库中的适当字符串。我写了一个类,负责搜索关键字并用适当的字符串替换它:
public class MyNodeVisitor extends NodeVisitor {
String name;
String text;
String icon;
public MyNodeVisitor() {
}
public MyNodeVisitor(String Name, String Text, String IconPath){
this.name = Name;
this.text = Text;
this.icon = IconPath;
}
public void visitStringNode (Text string)
{
if (string.getText().equals("DataName")) {
string.setText(name);
}
else if (string.getText().equals("DataText")){
string.setText(text);
}
else if(string.getText().equals("DataIcon")){
string.setText(icon);
}
}
}
因此,在我的 HTML 中,我定义了文本字符串 DataName、DataText 和 DataIcon,我希望将它们替换为从数据库调用的文本字符串。
上面提到的类在我的代码中以下列方式使用:
NodeList nl = new NodeList();
String htmlString = null;
InputStream contentStream = null;
contentStream = WWIO.openFileOrResourceStream(BROWSER_BALLOON, this.getClass());
htmlString = WWIO.readStreamToString(contentStream, null);
try {
Parser parser = new Parser(htmlString);
nl = parser.parse(null);
nl.visitAllNodesWith(new MyNodeVisitor(resultStr2,textString,resultStr3));
nl.toString();
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String output = nl.toHtml();
return output;
其中 resultStr2、textString 和 resultStr3 是应该替换我的 HTML 中的键字符串“DataName”、“DataText”和“DataIcon”的字符串。
问题是,虽然替换适用于前两个字符串 DataName 和 DataText(这意味着,每次我调用数据库的不同元素时,我都会得到适合具体元素的名称和文本),但它不适用于 DataIcon . 调试说它只是无法搜索 DataIcon 字符串,即使我已经在我的 HTMl 中定义了它,就像这样:
<div class="tabbertab">
<h2>Pictures</h2>
<div id="album">
<ul class="gallery">
<li><a href="#nogo" tabindex="1">1<img src="DataIcon" alt="landscape image 1" title="landscape image 1" /></a></li>
<li><a href="#nogo" tabindex="1">2<img src="C:\thesis\100GreatP\eclipse_ws\test\data\pictures\1\pyramid2.jpg" alt="landscape image 2" title="landscape image 2" /></a></li>
</ul>
</div>
</div>
我不知道其中有什么问题,我感谢各种帮助。谢谢!