getTextContent()是否有方法获取当前节点的文本内容,而不是后代的文本

getTextContent()返回当前节点及其子节点的文本内容

是否有方法获取当前节点的文本内容,而不是后代的文本

范例

<段落>
<链接>XML&lt/链接>
是一个
<strong>基于浏览器的XML编辑器&lt/strong>
编辑器允许用户在直观的文字处理器中编辑XML数据。
&lt/段落>

预期产量

段落=是一个编辑器,允许用户在直观的文字处理器中编辑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标记的文本,我不希望这样。
请提出一些想法

您需要的是筛选节点的子节点<段落&gt仅保留节点类型为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编辑器

它所做的是在一个节点的所有子节点上迭代,只保留文本(因此不包括注释、节点等),并累积它们各自的文本内容

节点元素中没有直接的方法只获取第一级的文本内容

发表评论