我在Java中使用SAX解析器,它是必需的。我需要用HTML标签解析XML,我必须像内容一样阅读,我不能使用CDATA,因为我无法更改XML文件。 XML文件是这样的:
<start id="123">
<tag1>text1</tag1>
<tag2>
This is an example
<span>
text inside an HTML tag
</span>
<p>
ABCDEFG<b>HIJK</b>LMNOP
</p>
</tag2>
</start>
我需要的是当我获得tag2的内容时,内容必须是:
This is an example
<span>text inside an HTML tag</span>
<p>ABCDEFG<b>HIJK</b>LMNOP</p>
这是我做的测试,内容没有显示HTML标记:
boolean istag2 = false;
StringBuilder text = new StringBuilder();
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
if (qName.equals("tag2")) {
istag2 = true;
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("tag2")) {
istag2 = false;
String fullText = text.toString();
System.out.println("tag2 full_text: " + fullText);
}
}
public void characters(char ch[], int start, int length) throws SAXException {
if (istag2) {
text.append(new String(ch, start, length));
}
}
提前致谢
答案 0 :(得分:0)
好的,我想我可能会理解你的期望是错误的。我想您可能希望通过"<span>"
方法调用将字符串"<p>"
和characters()
传递给您的应用程序。但事实并非如此:它们是通过startElement()
和endElement()
上的来电传递的。如果要以词法形式构建包含这些标记的字符串,则需要执行以下操作:
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
if (qName.equals("tag2")) {
inTag2 = true;
} else if (inTag2) {
text.append("<" + qName);
// TODO: serialize any attributes
text.append(">")
}
}