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

VTD XML parsing. Get value based on tag and attribute

我有点复杂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>

我是 VTD 的新手,现在我不想通过 DOM 或 SAX 解析整个 XML,而是想获取 <child child_id="1_2">

的值

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

下面是我正在做的事情。而且不工作!!

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]"); 的事情。它选择了一些属性为 @child_id 的标签,但不是全部。

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

您的 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);
}