場景: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處理器的預期結果,因爲它們的默認設置是剝離只包含空白的文本節點。這裏我們不是講「自重」,而是講基礎知識(缺乏)。 –