使用 Java 解析 XML 并获取元素值和属性值
Posted
技术标签:
【中文标题】使用 Java 解析 XML 并获取元素值和属性值【英文标题】:XML parsing using Java with getting element values and attribute values 【发布时间】:2012-04-03 06:31:46 【问题描述】:我有一个 XML 文件,元素也有属性。 我有一个简单的 java 文件,它解析和打印文本文件中元素的值,而不是元素属性值。 请您帮助获取要打印的属性值。 我正在粘贴下面的代码: --------employees.xml 文件------------
<?xml version="1.0" encoding="UTF-8"?>
<Personnel>
<Employee type="permanent">
<Name>Seagull</Name>
<Id>3674</Id>
<Age>34</Age>
</Employee>
<Employee type="contract">
<Name>Robin</Name>
<Id>3675</Id>
<Age>25</Age>
</Employee>
<Employee type="permanent">
<Name>Crow</Name>
<Id>3676</Id>
<Age>28</Age>
</Employee>
</Personnel>
----------------------------StoreData.java---------------- --------------------------
import java.io.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
public class StoreData
static public void main(String[] arg)
try
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter XML file name: ");
String xmlFile = bf.readLine();
File file = new File(xmlFile);
if (file.exists())
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(xmlFile);
//Create transformer
Transformer tFormer = TransformerFactory.newInstance().newTransformer();
//Output Types (text/xml/html)
tFormer.setOutputProperty(OutputKeys.METHOD, "text");
// Write the document to a file
Source source = new DOMSource(doc);
// Create File to view your xml data as (vk.txt/vk.doc/vk.xls/vk.shtml/vk.html)
Result result = new StreamResult(new File("file.txt"));
tFormer.transform(source, result);
System.out.println("File creation successfully!");
else
System.out.println("File not found!");
catch (Exception e)
System.err.println(e);
System.exit(0);
【问题讨论】:
见链接***.com/questions/9781568/… 【参考方案1】:您使用的是 XSLT 转换,默认情况下转换为元素文本。
使用相同的技术,需要一个自己的“样式表”:
InputStream xsltIn = StoreData.class.getResourceAsStream("/employees.xslt");
StreamSource xslt = new StreamSource(xsltIn);
///StreamSource xslt = new StreamSource(".../employees.xslt");
Transformer tFormer = TransformerFactory.newInstance().newTransformer(xslt);
上面我使用的是资源,而不是文件系统文件,所以它与应用程序打包在一起。
employees.xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Personnel">
Personnel:
<xsl:apply-templates select="./*"/>
End personnel.
</xsl:template>
<xsl:template match="Employee">
* Employee:<xsl:apply-templates select="./@*|./*"/>
</xsl:template>
<xsl:template match="Name|Id|Age|@type">
- <xsl:value-of select="name()"/>: <xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
这会产生:
Personnel:
* Employee:
- type: permanent
- Name: Seagull
- Id: 3674
- Age: 34
* Employee:
- type: contract
- Name: Robin
- Id: 3675
- Age: 25
* Employee:
- type: permanent
- Name: Crow
- Id: 3676
- Age: 28
End personnel.
【讨论】:
【参考方案2】:由于您使用的是 org.w3c.dom,因此您可以使用以下内容:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xmlFile));
Document doc = builder.parse(is);
NodeList nodeList = doc.getElementsByTagName("Employee");
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);
【讨论】:
以上是关于使用 Java 解析 XML 并获取元素值和属性值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 xslt 获取 XML 的属性值和代码作为 html 的值
easyUI validatebox设置值和获取值,以及属性和方法