gpt4 book ai didi

java - SAX - 无需 CDATA 即可读取 HTML 内容

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:08 26 4
gpt4 key购买 nike

我在 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));
}
}

提前致谢

最佳答案

好吧,我想我可能明白你的期望哪里错了。我想您可能期望字符串 "<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(">")
}
}

关于java - SAX - 无需 CDATA 即可读取 HTML 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42022882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com