场景:XML文本提取
考虑下面的XML文件:
<a:root
xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
aaaaaaaaaaaaaa
</a:root>
我如何提取的主要元素<a:root>
中的文本:
"\naaaaaaaaaaaaaa\n"
我的代码现在是:
import java.io.File;
import java.util.Stack;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class Proof {
public static void main(String[] args) {
Document doc = null;
DocumentBuilderFactory dbf = null;
DocumentBuilder docBuild = null;
try {
dbf = DocumentBuilderFactory.newInstance();
docBuild = dbf.newDocumentBuilder();
doc = docBuild.parse(new File("test2.xml"));
System.out.println(doc.getFirstChild().getTextContent());
} catch(Exception e) {
e.printStackTrace();
}
}
}
但它返回我想要的文本(“aaaaaaaaaaaaaa”)+其余元素的内部文本。输出:
Apples
Bananas
African Coffee Table
80
120
aaaaaaaaaaaaaa
的要求是不使用额外的XML的Java库!
好问题,+1。请参阅我的答案,以获取正确,简短且简单的XPath单行表达式,以便精确选择想要的文本节点。 :) –
@Dimitre Novatchev,我认为你需要降低自我重要性。此时我无法提供Java代码,但我提供了C#代码,据我所知,您不仅仅是XML专家,还有.NET专家;-),因此您可以检查结果:var result = doc .SelectNodes(@“a:root/text()”,xmlnsManager).OfType();'。结果应该是'\ r \ n \ r \ n \ r \ n' ...- :-) –
@Kirill Polishchuk:用Saxon或AltovaXML运行您的代码并计算文本节点的数量 - 您的代码生成 - - 通过纯粹的运气 - 只有使用某些(微软)XSLT处理器的预期结果,因为它们的默认设置是剥离只包含空白的文本节点。这里我们不是讲“自重”,而是讲基础知识(缺乏)。 –