- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Node.getTextContent() 返回当前节点及其子节点的文本内容。
有没有办法获取当前节点的文本内容,而不是后代的文本。
例子
<paragraph>
<link>XML</link>
is a
<strong>browser based XML editor</strong>
editor allows users to edit XML data in an intuitive word processor.
</paragraph>
预期输出
paragraph = is a editor allows users to edit XML data in an intuitive word processor.
link = XML
strong = browser based XML editor
我试过下面的代码
String str = "<paragraph>"+
"<link>XML</link>"+
" is a "+
"<strong>browser based XML editor</strong>"+
"editor allows users to edit XML data in an intuitive word processor."+
"</paragraph>";
org.w3c.dom.Document domDoc = null;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder;
try {
docBuilder = docFactory.newDocumentBuilder();
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
domDoc = docBuilder.parse(bis);
} catch (ParserConfigurationException e1) {
e1.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
DocumentTraversal traversal = (DocumentTraversal) domDoc;
NodeIterator iterator = traversal.createNodeIterator(
domDoc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true);
for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) {
String tagname = ((Element) n).getTagName();
System.out.println(tagname + "=" + ((Element)n).getTextContent());
}
但是它给出了这样的输出
paragraph=XML is a browser based XML editoreditor allows users to edit XML data in an intuitive word processor.
link=XML
strong=browser based XML editor
注意 paragraph 元素包含 link 和 strong 标签的文本,这是我不想要的。请提出一些想法?
最佳答案
你想要的是过滤你节点的 child <paragraph>
只保留节点类型为 Node.TEXT_NODE
的节点.
这是一个返回你想要的内容的方法的例子
public static String getFirstLevelTextContent(Node node) {
NodeList list = node.getChildNodes();
StringBuilder textContent = new StringBuilder();
for (int i = 0; i < list.getLength(); ++i) {
Node child = list.item(i);
if (child.getNodeType() == Node.TEXT_NODE)
textContent.append(child.getTextContent());
}
return textContent.toString();
}
在你的例子中它意味着:
String str = "<paragraph>" + //
"<link>XML</link>" + //
" is a " + //
"<strong>browser based XML editor</strong>" + //
"editor allows users to edit XML data in an intuitive word processor." + //
"</paragraph>";
Document domDoc = null;
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());
domDoc = docBuilder.parse(bis);
} catch (Exception e) {
e.printStackTrace();
}
DocumentTraversal traversal = (DocumentTraversal) domDoc;
NodeIterator iterator = traversal.createNodeIterator(domDoc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true);
for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) {
String tagname = ((Element) n).getTagName();
System.out.println(tagname + "=" + getFirstLevelTextContent(n));
}
输出:
paragraph= is a editor allows users to edit XML data in an intuitive word processor.
link=XML
strong=browser based XML editor
它所做的是迭代一个节点的所有子节点,只保留文本(因此不包括评论、节点等)并累积它们各自的文本内容。
Node
中没有直接方法或 Element
只获取第一层的文本内容。
关于java - Node.getTextContent() 有没有办法获取当前节点的文本内容,而不是后代的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12191414/
所以我一直在尝试按预订顺序收集所有节点名称及其内容。因此,我使用递归方法从 XML 文件中获取所有节点以及文本。问题是每当我执行它时,我都会不断在 ArrayList 中获取空字符串。空字符串位于 A
当我尝试从我的 servlet 的 doGet 方法访问我的 xml 数据时,它只输出不超过空格的值,包括整个值。 XML 文件: Apartment
我试图只获取顶级文本,而不获取任何子文本。所以我有以下 xml: text1 text2 我只想得到父(text1)文本。所以在这个例子中我会做 node.getTextContent
我正在尝试从 xml 节点获取文本。该代码似乎可以识别该节点。这段代码 String L = "节点长度:"+ nList.getLength()+ "文本:"+ nList.item(0).toSt
我有以下XML和Xpath代码..使用node.getContent()我得到完整SUID元素的字符串返回..获取每个元素并使用recid,suid构造一个新对象的最佳方法是什么,组 谢谢!
下面是抛出 AbstractMethodError 的示例代码块: import org.w3c.dom.Node; .. Node root = soapBody.getElementByTagNa
Node.getTextContent() 返回当前节点及其子节点的文本内容。 有没有办法获取当前节点的文本内容,而不是后代的文本。 例子 XML is a browser
我正在尝试在 JUnit 测试中构建 xml 文档。 doc=docBuilder.newDocument(); Element root = doc.createElement("Setting
我正在尝试将 ckfinder 合并到我的 Apache/Tomcat 系统中。我遇到的问题是,当配置文件尝试读取 configuration.xml 时,它会很好地返回节点,但在节点上调用 getT
有人遇到过这个问题吗? 我在 Java 7 中使用 javax.xml.soap.SOAPElement 的 getTextContent()。但是当我使用 Java 8 时,它给出编译错误“方法 g
在我的项目中,我遇到了一个问题 The method getTextContent() is undefined for the type Node 我目前正在使用 jdk 1.5,谁能告诉我这是怎么
我有使用 DOM 解析器解析的 xml 配置文件。当我使用 node.getTextContent(); 从子节点获取值时,我无法删除字符串 value 中的空格。当我给出没有空格的值时,它会起作用。
我使用的是旧版本的 JRE (1.4),其中 Node.getTextContents() 和 Node.setTextContents() 不可用。做这些 Action 还有很长的路要走吗? 示例
java 源代码不能用 jdk 6 编译。 import org.w3c.dom.Node; Node node = list.item(0); String txtContent = node
本文整理了Java中org.opensaml.xml.schema.impl.XSAnyImpl.getTextContent()方法的一些代码示例,展示了XSAnyImpl.getTextConte
本文整理了Java中org.opensaml.core.xml.schema.XSAny.getTextContent()方法的一些代码示例,展示了XSAny.getTextContent()的具体用
我编写了一些 java 代码,使用 DOM 解析 XML,以便在我的程序中加载数据。使用 Eclipse“format”函数格式化 XML 时,我遇到了一个问题:以前从文档元素中工作的 getText
本文整理了Java中org.opendaylight.controller.netconf.util.xml.XmlElement.getTextContent()方法的一些代码示例,展示了XmlEl
本文整理了Java中org.opendaylight.controller.config.util.xml.XmlElement.getTextContent()方法的一些代码示例,展示了XmlEle
我遇到了 org.w3c.dom 的 Node.getTextContent() 的问题。我有以下代码块: String name = document.getElementsByTagName("n
我是一名优秀的程序员,十分优秀!