Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用DOM解析器解析xml标记?_Java_Xml_Dom_Xml Parsing - Fatal编程技术网

如何在java中使用DOM解析器解析xml标记?

如何在java中使用DOM解析器解析xml标记?,java,xml,dom,xml-parsing,Java,Xml,Dom,Xml Parsing,我将使用DOM解析器在java中解析以下xml文件,但没有从xml文件中获取检索标记的信息,因此请帮助我解决这个问题 <policy name="DayCapturePolicy" type="capture"> <starttime>9:00:00 AM</starttime> <endtime>9:00:00 PM</endtime> <event name="NEW_APP_INSTALLED"> <event

我将使用DOM解析器在java中解析以下xml文件,但没有从xml文件中获取检索标记的信息,因此请帮助我解决这个问题

<policy name="DayCapturePolicy" type="capture">
<starttime>9:00:00 AM</starttime>
<endtime>9:00:00 PM</endtime>
<event name="NEW_APP_INSTALLED">
 <eventFilter selectedAppName="Alarm"/> 
   <eventParam>selectedAppName</eventParam>
  <eventParam>selectedAppVersion</eventParam>
  <eventParam>appPackageName</eventParam>
  <eventParam>appDirPath</eventParam>
</event>
</policy>

上午9:00:00
晚上9:00:00
所选应用程序名
选择应用程序版本
appPackageName
appDirPath
我想知道如何从上述xml文件中解析事件筛选器标记的值?我还想知道如何从eventParam标记中检索所有值。我能够检索第一个标记的值,即selectedAppName,但无法解析salectedAppVersion.appPackageName,appDirPath的值。提前感谢

我尝试了这个代码进行解析

      NodeList nodeList = document.getElementsByTagName("policy");
    Log.d("Reminder", "Number of Policies : "+nodeList.getLength());
    for(int i=0;i<nodeList.getLength();i++){
        Log.d("Reminder", "In 1");
        //PolicyInfo policyInfo = new PolicyInfo();
        Node node = nodeList.item(i);
        NamedNodeMap namedNodeMap = node.getAttributes();
        String policyName = namedNodeMap.getNamedItem("name").getNodeValue();
        String policyType = namedNodeMap.getNamedItem("type").getNodeValue();
        if (node.getNodeType() == Node.ELEMENT_NODE) {

              Element eElement = (Element) node;
              Log.d("startTime  : " ,""+ getTagValue("starttime", eElement));
              Log.d("endtime  : " ,""+ getTagValue("endtime", eElement));
              NodeList nList = document.getElementsByTagName("event");
              for(int j=0;i<nList.getLength();i++){
                    Log.d("Reminder", "In 1");
                    //PolicyInfo policyInfo = new PolicyInfo();
                    Node innerNode = nList.item(i);
                    NamedNodeMap innerNamedNodeMap = innerNode.getAttributes();
                    String eventName = innerNamedNodeMap.getNamedItem("name").getNodeValue();
                    Log.d("innerNode", eventName);
                    if(innerNode.getNodeType()== Node.ELEMENT_NODE){
                         Element innerElement = (Element) innerNode;
                         Log.d("eventParam  : " ,""+ getTagValue("eventParam", innerElement));
                         Log.d("eventFilter  : " ,""+ getTagValue("eventFilter", innerElement));
                         //Log.d("endtime  : " ,""+ getTagValue("endtime", eElement));
                    }
              //System.out.println("starttime : " + getTagValue("starttime", eElement));
             // System.out.println("endtime: " + getTagValue("endtime", eElement));
              //System.out.println("Nick Name : " + getTagValue("nickname", eElement));
              //System.out.println("Salary : " + getTagValue("salary", eElement));

           }
        }


private static String getTagValue(String sTag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

    Node nValue = (Node) nlList.item(0);

    return nValue.getNodeValue();
}
NodeList NodeList=document.getElementsByTagName(“策略”);
Log.d(“提醒”,“策略数:+nodeList.getLength());

对于(int i=0;i,我建议您使用XPath表达式,这要简单得多。因为您已经有了
文档
,只需创建一个XPath:

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
XPathExpression expr = xPath.compile("/policy/event/eventFilter/@selectedAppName");

NodeList nl = (NodeList) expr.evaluate(doc , XPathConstants.NODESET);

for (int i = 0; i < nl.getLength(); i++) {
    Node node = nl.item(i);
    System.out.println(node.getTextContent());
}
要获取所有的
,请将xpath表达式切换为
/policy/event/eventParam

那会打印出来的

Alarm
selectedAppName
selectedAppVersion
appPackageName
appDirPath


指向oracle xpath javadoc的链接:

您能包含GetTagValues的代码吗谢谢您的回复,但是如果有一个名为“event”的元素,您的代码就正常工作了。如果我在其中添加了多个元素,那么fails@user1700156你能详细说明一下吗?我已经添加了更多的事件,并且测试没有问题。