Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 XML解析_Java_Xml - Fatal编程技术网

Java XML解析

Java XML解析,java,xml,Java,Xml,我需要从XML文件中提取(使用Java)给定名称标记的标记,如下所示: 这是我的XML文件: <aa> <bb> <name>k1</name> <value>5</value> </bb> <bb> <name>k2</name> <value>7</value> </bb> </aa&g

我需要从XML文件中提取(使用Java)给定名称标记的标记,如下所示:

这是我的XML文件:

<aa>
  <bb>
    <name>k1</name>
    <value>5</value>
  </bb>
  <bb>
    <name>k2</name>
    <value>7</value>
 </bb>
</aa>

k1
5.
k2
7.
功能输入:
标签的完整路径,例如:/aa/bb/name=k2

(本例的输出应返回
7

还有一个更高级的问题:我需要从XML文件中提取所有name:value对,然后名称由正则表达式给出
我认为XPath在这里是正确的工具,但在细节上却是魔鬼

您可以使用Java SE 5中包含的javax.xml.xpath API:

import java.io.FileReader;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.xml.sax.InputSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        XPathFactory xpf = XPathFactory.newInstance();
        XPath xpath = xpf.newXPath();
        XPathExpression xpe = xpath.compile("//bb[name/text()='k2']/value");

        InputSource xml = new InputSource(new FileReader("input.xml"));
        String result = xpe.evaluate(xml);
        System.out.println(result);
    }
}
试着用一个衬里(见下图):

String found = new XMLDocument(text).xpath("/aa/bb[name='k2']/text()").get(0);

}下面是使用提取值的代码


你有问题吗?(我指的是一个具体的问题)我想你这里有三个问题。1.要获得值7,即第二个bb_tag_start内的值_tag_start。2.获取所有名称-值对,即标记名称和值。3.如果标记名以正则表达式形式给出,则获取该值。请澄清:安德鲁·汤普森。我有你名单上的问题1和3。谢谢很多很多的复制品。这里有一个(链接到搜索中的第二个结果)
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
import org.junit.Test;

import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;

import javax.xml.xpath.XPathExpressionException;

public class XmlParsingTest {
    @Test
    public void testParsing() throws XPathExpressionException, JDOMException, IOException {

         SAXBuilder builder = new SAXBuilder();
         File xmlFile = new File("src/test/resources/yourXMLDoc.xml");

         Document origDoc = (Document) builder.build(xmlFile);

         XPath xPathMonsOccCategoryIdInOriginalDoc = XPath.newInstance("//bb[name/text()='k2']/value");

         Element element = (Element) xPathMonsOccCategoryIdInOriginalDoc.selectSingleNode(origDoc.getRootElement());

         assertEquals("7", element.getTextTrim());


}
import com.ximpleware.*;

public class extractValue{
    public static void  main(String s[]) throws VTDException, IOException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false));
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/aa/bb[name='k1']/value");
        int i=0;
        while ((i=ap.evalXPath())!=-1){
            System.out.println(" value ===>"+vn.toString(i));
        }   
    }
}