我有这个 xml 文件
<Cdtr>
<Nm>DEF Electronics</Nm>
<PstlAdr>
<AdrLine>Corn Exchange 5th Floor</AdrLine>
<AdrLine>Mark Lane 55</AdrLine>
<AdrLine>EC3R7NE London</AdrLine>
<AdrLine>GB</AdrLine>
</PstlAdr>
</Cdtr>
我正在尝试解析 xml,使用 Java 中的 dom 解析器获取叶标签名称(具有值)及其各自的值。以下是我为此使用的代码。
public class GetNodeValues {
public static void main(String[] args) {
try {
String xmlFile = "C:/Users/Administrator/workspace/sample.xml";
File file = new File(xmlFile);
if(file.exists()){
// Create a factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// Use the factory to create a builder
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(xmlFile);
doc.getDocumentElement().normalize();
// Get a list of all elements in the document
NodeList list = doc.getElementsByTagName("*");
System.out.println("XML Elements: ");
for (int i=0; i<list.getLength(); i++) {
// Get element
Element element = (Element)list.item(i);
String nodnam = element.getNodeName();
NodeList nl = doc.getElementsByTagName(nodnam);
Element ele = (Element) nl.item(0);
if (ele.getChildNodes().getLength() > 0) // then it has text
String val = ele.getChildNodes().item(0).getNodeValue();
if (val.startsWith("\n")) { //Discarding pseudo nodes
}else {
System.out.println("Node: "+nodnam+" | Val: "+val); //print node names and values
}
}
}
}
else{
System.out.print("File not found!");
}
}
catch (Exception e) {
System.exit(1);
}
}
}
我得到以下结果。
Node: AdrLine | Val: Corn Exchange 5th Floor
Node: AdrLine | Val: Corn Exchange 5th Floor
Node: AdrLine | Val: Corn Exchange 5th Floor
Node: AdrLine | Val: Corn Exchange 5th Floor
请帮忙。我不明白为什么它重复标签值。预期的输出是
Node: AdrLine | Val: Corn Exchange 5th Floor
Node: AdrLine | Val: Mark Lane 55
Node: AdrLine | Val: EC3R7NE London
Node: AdrLine | Val: GB