getTextContent()返回当前节点及其子节点的文本内容
是否有方法获取当前节点的文本内容,而不是后代的文本
范例
<;段落>;
<;链接>;XML</链接>;
是一个
<;strong>;基于浏览器的XML编辑器</strong>;
编辑器允许用户在直观的文字处理器中编辑XML数据。
</段落>;
预期产量
段落=是一个编辑器,允许用户在直观的文字处理器中编辑XML数据。
link=XML
strong=基于浏览器的XML编辑器
我试过下面的代码
String str=“<;段落>;”+
“<;link>;XML<;/link>;”+
“是一个”+
“<;strong>;基于浏览器的XML编辑器<;/strong>;”+
“编辑器允许用户在直观的文字处理器中编辑XML数据。”+
“<;/paration>;”;
org.w3c.dom.Document domDoc=null;
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
文档生成器docBuilder;
试一试{
docBuilder=docFactory.newDocumentBuilder();
ByteArrayInputStream bis=新的ByteArrayInputStream(str.getBytes());
domDoc=docBuilder.parse(bis);
}捕获(ParserConfiguration异常e1){
e1.printStackTrace();
}捕获(SAXE异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
DocumentTraversal traversal=(DocumentTraversal)domDoc;
NodeIterator迭代器=traversal.createNodeIterator(
domDoc.getDocumentElement(),NodeFilter.SHOW_元素,null,true);
对于(节点n=iterator.nextNode();n!=null;n=iterator.nextNode()){
字符串标记名=((元素)n).getTagName();
System.out.println(标记名+“=”+((元素)n).getTextContent());
}
但它的输出是这样的
paragration=XML是一种基于浏览器的XML编辑器,允许用户在直观的文字处理器中编辑XML数据。
link=XML
strong=基于浏览器的XML编辑器
请注意,段落元素包含链接和strong标记的文本,我不希望这样。
请提出一些想法
您需要的是筛选节点的子节点<;段落>仅保留节点类型为node.TEXT\u node的节点
这是一个返回所需内容的方法示例
公共静态字符串getFirstLevelTextContent(节点){
NodeList list=node.getChildNodes();
StringBuilder textContent=新建StringBuilder();
对于(int i=0;i<;list.getLength();++i){
节点子节点=列表项(i);
if(child.getNodeType()==Node.TEXT\u节点)
append(child.getTextContent());
}
返回textContent.toString();
}
在您的示例中,它意味着:
String str=“<;段落>;”+//
“<;link>;XML<;/link>;”//
“是一个”+//
“<;strong>;基于浏览器的XML编辑器<;/strong>;”//
“编辑器允许用户在直观的文字处理器中编辑XML数据。”+//
“<;/paration>;”;
文档domDoc=null;
试一试{
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
ByteArrayInputStream bis=新的ByteArrayInputStream(str.getBytes());
domDoc=docBuilder.parse(bis);
}捕获(例外e){
e、 printStackTrace();
}
DocumentTraversal traversal=(DocumentTraversal)domDoc;
NodeIterator迭代器=traversal.createNodeIterator(domDoc.getDocumentElement(),NodeFilter.SHOW_元素,null,true);
对于(节点n=iterator.nextNode();n!=null;n=iterator.nextNode()){
字符串标记名=((元素)n).getTagName();
System.out.println(标记名+“=”+getFirstLevelTextContent(n));
}
输出:
段落=是一个编辑器,允许用户在直观的文字处理器中编辑XML数据。
link=XML
strong=基于浏览器的XML编辑器
它所做的是在一个节点的所有子节点上迭代,只保留文本(因此不包括注释、节点等),并累积它们各自的文本内容
在节点或元素中没有直接的方法只获取第一级的文本内容