我有一个正在转换为 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/