0

我有如下的xml文件,

<CHPkt xmlns="Smartscript/EmarSchema">  

    <CHInfo>
        <StoreId>1800</StoreId>

        <CHId>DB439A79-3D6F-4D25-BE0A-C4692978C072</CHId>

        <CHName>Test</CHName>

        <Address>
            <Address1>Test Address</Address1>           
        </Address>      

    <DrugRounds>
        <RoundTime>09:00</RoundTime>            

        <RoundTime>13:00</RoundTime>            

        <RoundTime>17:00</RoundTime>
    </DrugRounds>
    </CHInfo>
</CHPkt>

如何获取具有相同名称的标签的值,我的代码如下,

public class ReadXml {

    public static void main(String[] args){
            try{
                File xmlFile = new File("/home/jayakumar/Desktop/SmartScript.XML");
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = factory.newDocumentBuilder();
                Document document = builder.parse(xmlFile);     

                NodeList nodeList1 = document.getElementsByTagName("CHInfo");
                System.out.println("######################################");
                for(int i =0;i<nodeList1.getLength();i++){
                    org.w3c.dom.Node node = nodeList1.item(i);
                    if(node.getNodeType()== org.w3c.dom.Node.ELEMENT_NODE){
                        Element element = (Element) node;
                        System.out.println("StoreId : " + getTagValue("StoreId", element));
                        System.out.println("CHId : " + getTagValue("CHId", element));
                        System.out.println("CHName : " + getTagValue("CHName", element));
                        System.out.println("Address : " + getTagValue("Address1", element));                                        
                    }

                    NodeList nodeList2 = document.getElementsByTagName("DrugRounds");
                    System.out.println("-------------->"+"DrugRounds");             
                    for(int j =0;j<nodeList2.getLength();j++){
                        org.w3c.dom.Node subNode = nodeList2 .item(j);
                        Element e = (Element) subNode;                  
                        System.out.println("RoundTime : "+getTagValue("RoundTime", e));
                        System.out.println("RoundTime : "+getTagValue("RoundTime", e));
                        System.out.println("RoundTime : "+getTagValue("RoundTime", e));                 
                    }               
                }

            }catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }

        private static String getTagValue(String sTag, Element element) {
            NodeList nlList = element.getElementsByTagName(sTag).item(0).getChildNodes();        
            Node nValue = (Node) nlList.item(0);
            return nValue.getNodeValue();
        }
    }

我无法提取第二个和第三个 Roudtimes 的值。如何解析具有相同名称的标签

谢谢

4

1 回答 1

0

为什么不检查它是否有任何子节点然后从中获取值

for (int j = 0; j < nodeList2.getLength(); j++) {
    org.w3c.dom.Node subNode = nodeList2.item(j);
    NodeList childNodes = subNode.getChildNodes();
    for(int iDx = 0; iDx < childNodes.getLength(); iDx++){
    if(childNodes.item(iDx) instanceof Element){
        Element e = (Element) childNodes.item(iDx);
        System.out.println("RoundTime : "+ e.getFirstChild().getNodeValue());
    }
}
于 2012-06-01T06:57:55.040 回答