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