Java XML解析
我需要从XML文件中提取(使用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
<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));
}
}
}