java - 在将输入流解析为 XML 之前,如何替换输入流中的 HTML 转义字符?

标签 java android

我有一个正在转换为 XML 并读取的输入流。当我深入研究 XML 中的某些文本元素时,它们被截断了。我相信解析器会在转义 HTML 之后丢弃所有内容,例如 & 这是获取输入流然后获取文本元素的代码。

String hvurl = "https://www.mysite.com/api/a/" + answerId;
in = OpenHttpConnection(hvurl); 

Document doc = null;
DocumentBuilderFactory dbf = 
    DocumentBuilderFactory.newInstance();
DocumentBuilder db;

try {
    db = dbf.newDocumentBuilder();
    doc = db.parse(in);

} catch (ParserConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SAXException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}     

...
//Now when I get the text element, it's truncated
//---get the <varietalTitle> elements under the <varietal> 
// element---
NodeList varietalTitleNodes = 
    (varietalElement).getElementsByTagName("varietaltitle");

//---convert a Node into an Element---
Element varietalTitleElement = (Element) varietalTitleNodes.item(0);

//---get all the child nodes under the <varietaltitle> element---
NodeList varietalTitleTextNodes = 
    ((Node) varietalTitleElement).getChildNodes();

//---retrieve the text of the <varietalid> element---
strVarietalTitle = ((Node) varietalTitleTextNodes.item(0)).getNodeValue();

最佳答案

无法找到问题发生的地方。我的猜测是使用 normalize() method如下。

试试这个:

 strVarietalTitle = ((Node) varietalTitleTextNodes.item(0)).getNodeValue().normalize();

来自文档 Normalize():

Puts 将所有 Text 节点置于此节点下子树的完整深度中,包括属性节点,进入“正常”形式,其中只有结构(例如,元素、注释、处理指令、CDATA 部分、和实体引用)分隔 Text 节点,即既没有相邻的 Text 节点,也没有空的 Text 节点。这可用于确保文档的 DOM View 与保存和重新加载时相同,并且在依赖于特定文档树结构的操作(例如 XPointer [XPointer] 查找)要执行时很有用使用。如果附加到 Node.ownerDocument 的 DOMConfiguration 对象的参数“normalize-characters”为 true,则此方法也将完全规范化 Text 节点的字符。 注意:在文档包含 CDATASection 的情况下,仅规范化操作可能不够,因为 XPointer 不区分文本节点和 CDATASection 节点。

关于java - 在将输入流解析为 XML 之前,如何替换输入流中的 HTML 转义字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3733192/

相关文章:

java - 对远程服务器的查询速度慢

android - 保护 WCF Web 服务,保持与 Android 和 Silverlight 的兼容性

android - 在 Android 设备上运行时,HTML5 音频不显示计时器

java - [\s\S]* 有什么区别?和 。*?在 Java 正则表达式中?

java - 命名和初始化数组中的对象

java - 关闭和打开数据库连接?

java - 检索具有相同值的所有映射键

java - 如何通过外部网站将数据从 Activity 传递到 WebView

Android JSON解析问题-java.lang.string无法转换为JSONObject

android - 哪种 Activity 生命周期方法最适合注册/取消注册到事件总线?