Rap*_*rex 6 java xml parsing dom nodes
我的XML看起来像这样:
<ConnProf ConnProfID="1111">
<ConnNum>1</ConnNum>
<IsMSPA>false</IsMSPA>
<IsArray>false</IsArray>
<IsDDOR>false</IsDDOR>
<Subsystem SSID="2222"ConnProfID="3333">
<SSName>AA</SSName>
<GenericSSName>AA</GenericSSName>
<ConnFuncAddr>aaa</ConnFuncAddr>
<DSSNum>22</DSSNum>
<isRemoved>false</isRemoved>
</Subsystem>
<Subsystem SSID="4444" ConnProfID="5555">
<SSName>BBBB</SSName>
<GenericSSName>BB</GenericSSName>
<ConnFuncAddr>bbbbbb</ConnFuncAddr>
<DSSNum>44</DSSNum>
<isRemoved>false</isRemoved>
</Subsystem>
Run Code Online (Sandbox Code Playgroud)
我无法获得ConnNum,IsMSPA,IsArray和IsDDOR.我尝试使用ConnNum:
//get ConnNum
Node n = doc.getFirstChild();
if (n.hasChildNodes())
System.out.println(n.getFirstChild().getNodeValue());
else
System.out.println(n.getNodeValue());
Run Code Online (Sandbox Code Playgroud)
但是当我期待1时它只返回null.
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class test
{
public static void main(String[] args)
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder db = dbf.newDocumentBuilder();
for (int i = 1; i <= 8; i++)
{
Document doc = db.parse("file" + i + ".xml");
doc.getDocumentElement ().normalize ();
System.out.println ("Root element of the doc is " + doc.getDocumentElement().getNodeName());
//get ConnNum
Node n = doc.getFirstChild();
if (n.hasChildNodes())
System.out.println(n.getFirstChild().getNodeValue());
else
System.out.println(n.getNodeValue());
NodeList listOfSubsystems = doc.getElementsByTagName("Subsystem");
int totalSubsystems = listOfSubsystems.getLength();
if (totalSubsystems == 0)
continue;
else
{
System.out.println("Total number of subsystems : " + totalSubsystems + "\n");
Dish dish = new Dish();
for(int s=0; s < listOfSubsystems.getLength() ; s++)
{
Node firstPersonNode = listOfSubsystems.item(s);
if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE)
{
Element firstPersonElement = (Element)firstPersonNode;
printElement(firstPersonElement, "SSName");
printElement(firstPersonElement, "GenericSSName");
printElement(firstPersonElement, "ConnFuncAddr");
printElement(firstPersonElement, "DSSNum");
printElement(firstPersonElement, "SCNum");
printElement(firstPersonElement, "SCAcronym");
printElement(firstPersonElement, "PassNum");
printElement(firstPersonElement, "FzCode");
printElement(firstPersonElement, "isRemoved");
System.out.println("------------------");
}
}
System.out.println("\n==============================");
}
}
}
catch(ParserConfigurationException pce)
{
pce.printStackTrace();
}
catch(SAXException se)
{
se.printStackTrace();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
public static void printElement(Element a, String name)
{
NodeList elementList = a.getElementsByTagName(name);
Element b = (Element)elementList.item(0);
if (b != null)
{
NodeList list = b.getChildNodes();
System.out.println( ((Node)list.item(0)).getNodeValue().trim() );
}
}
}
Run Code Online (Sandbox Code Playgroud)
and*_*dyb 13
也许第一个孩子不是你想象的那样.空格在XML中很重要,firstChild可能实际上是一个文本节点.
节点具有类型,您可以迭代检查Element节点类型的所有子节点以获取实际元素的句柄.
编辑:这将打印您之后的值.它在Element节点上进行过滤,然后对每个节点的第一个子节点(包含文本的节点)进行过滤.
NodeList nodeList = n.getChildNodes();
for (int j = 0; j < nodeList.getLength(); j++) {
Node childNode = nodeList.item(j);
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(childNode.getNodeName() + " " + childNode.getFirstChild().getNodeValue());
}
}
Run Code Online (Sandbox Code Playgroud)
此外,正如@Steve Townsend正确编写的getTextContent()
那样,childNode.getFirstChild().getNodeValue()
如果您使用的是Java 1.5或更高版本,则可以使用而不是.
NodeList nodeList = n.getChildNodes();
for (int j = 0; j < nodeList.getLength(); j++) {
Node childNode = nodeList.item(j);
if (childNode instanceof Element) {
Element childElement = (Element) childNode;
System.out.println(childElement.getNodeName() + " " + childElement.getFirstChild().getNodeValue());
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11475 次 |
最近记录: |