VTD XML解析。根据标记和属性获取值

时间:2018-03-31 13:47:08

标签: xpath vtd-xml

我有点复杂的XML。

from django.http import HttpReponse

def index(request):
    return HttpResponse('Hello Ahmed')

我是VTD的新手,现在不是通过DOM或SAX解析整个XML,而是希望得到<?xml version="1.0" encoding="UTF-8"?><test:mark><parent parent_id="1"><child child_id="1_1">11Value</child><child child_id="1_2">12Value</child><child child_id="1_3">13Value</child></parent><other other_id="1"><inner>1233</inner></other></test:mark>

的值

任何人都可以建议可以使用什么XPATH表达式。在此先感谢您的帮助。其他更好的选择也是受欢迎的。

以下是我正在做的事情。并没有工作!!

<child child_id="1_2">

如果我做VTDGen vtdGen = new VTDGen(); vtdGen.parseFile("E:/JavaProjects/SampleTestingFiles/SampleXML.xml", true); VTDNav vtdNav = vtdGen.getNav(); AutoPilot autoPilot = new AutoPilot(vtdNav); try { autoPilot.selectXPath("//parent/child[@child_id='1_2']"); if(autoPilot.evalXPathToBoolean()) { int token = autoPilot.evalXPath(); if(token != -1) { String value = vtdNav.toNormalizedString(token); System.out.println("The value is - " + value); } } } catch (Exception e) { e.printStackTrace(); } 之类的事情。它选择一些属性为autoPilot.selectXPath("//parent/child[@child_id]");但不是全部的标签。

我们非常感谢任何帮助,即使是关于我们应该如何提供XPATH的文档也可以提供帮助。

1 个答案:

答案 0 :(得分:1)

你的XPath评估逻辑不正确(你的xpath表达似乎没问题)......

if(autoPilot.evalXPathToBoolean()) {
                int token = autoPilot.evalXPath();
                if(token != -1) {
                    String value = vtdNav.toNormalizedString(token);
                    System.out.println("The value is - " + value);
                }
            }

应改写为

int i=-1;
while((i=autoPilot.evalXPath())!=-1){
              String value = vtdNav.toNormalizedString(i);
              System.out.println("The value is - " + value);
}