如何使用java获取xml节点的属性值

我有一个看起来像这样的xml:

{ .....} 

在这里,我想检索“源类型”的值,其中类型s属性。

我试过这样,但它不起作用:

  DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = domFactory.newDocumentBuilder(); Document dDoc = builder.parse("D:/workspace1/ereader/src/main/webapp/configurations/config.xml"); System.out.println(dDoc); XPath xPath = XPathFactory.newInstance().newXPath(); Node node = (Node) xPath.evaluate("//xml/source/@type/text()", dDoc, XPathConstants.NODE); System.out.println(node); } catch (Exception e) { e.printStackTrace(); 

我也试过这个:

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputSource is = new InputSource(new StringReader("config.xml")); Document doc = builder.parse(is); NodeList nodeList = doc.getElementsByTagName("source"); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.hasAttributes()) { Attr attr = (Attr) node.getAttributes().getNamedItem("type"); if (attr != null) { String attribute= attr.getValue(); System.out.println("attribute: " + attribute); } } } 

请帮助我!!

先谢谢,Varsha。

由于您的问题更通用,因此请尝试使用Java中提供的XML解析器来实现它。如果您需要特定于解析器,请在此处更新您已尝试过的代码

   TEST   
 DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("uri to xmlfile"); XPathFactory xPathfactory = XPathFactory.newInstance(); XPath xpath = xPathfactory.newXPath(); XPathExpression expr = xpath.compile("//ep/source[@type]"); NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); for (int i = 0; i < nl.getLength(); i++) { Node currentItem = nl.item(i); String key = currentItem.getAttributes().getNamedItem("type").getNodeValue(); System.out.println(key); } 

尝试这样的事情:

  DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document dDoc = builder.parse("d://utf8test.xml"); XPath xPath = XPathFactory.newInstance().newXPath(); NodeList nodes = (NodeList) xPath.evaluate("//xml/ep/source/@type", dDoc, XPathConstants.NODESET); for (int i = 0; i < nodes.getLength(); i++) { Node node = nodes.item(i); System.out.println(node.getTextContent()); } 

请注意更改:

  • 我们要求一个节点集(XPathConstants.NODESET),而不仅仅是一个节点。
  • xpath现在是// xml / ep / source / @ type而不是// xml / source / @type / text()

PS:你可以在你的问题中添加标签java吗? 谢谢。

使用

document.getElementsByTagName(“*”);

要从XML文件中获取所有XML元素,但这会返回重复的属性

例:

NodeList list = doc.getElementsByTagName(“*”);

System.out.println(“XML Elements:”);

  for (int i=0; i 

下面是在VTD-XML中执行此操作的代码

 import com.ximpleware.*; public class queryAttr{ public static void main(String[] s) throws VTDException{ VTDGen vg= new VTDGen(); if (!vg.parseFile("input.xml", false)) return false; VTDNav vn = vg.getNav(); AutoPilot ap = new AutoPilot(vn); ap.selectXPath("//xml/ep/source/@type"); int i=0; while((i = ap.evalXPath())!=-1){ system.out.println(" attr val ===>"+ vn.toString(i+1)); } } } 

我很高兴这个片段工作正常:

 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new File("config.xml")); NodeList nodeList = document.getElementsByTagName("source"); for(int x=0,size= nodeList.getLength(); x 
 public static void main(String[] args) throws IOException { String filePath = "/Users/myXml/VH181.xml"; File xmlFile = new File(filePath); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; try { dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(xmlFile); doc.getDocumentElement().normalize(); printElement(doc); System.out.println("XML file updated successfully"); } catch (SAXException | ParserConfigurationException e1) { e1.printStackTrace(); } } private static void printElement(Document someNode) { NodeList nodeList = someNode.getElementsByTagName("choiceInteraction"); for(int z=0,size= nodeList.getLength();z 

我们可以使用方法尝试这个代码