不晓得提问有木有【xml】大神来解答!~!~
xml吧
全部回复
仅看楼主
level 1
Bigbismile 楼主
下面是一个xml文件,要求是:
通过读取 package.xinf 文件,读取出模板包的名称、并分别统计出文件中HTML、CSS、ftl文件数量,
读取出包含 property 子节点的模型包含哪些属性标识名称,并将读取出的信息打印在控制台上。
<?xml version="1.0" encoding="UTF-8"?>
<package version="0.9">
<!-- 模板包名称 -->
<propertie id="title" a="111">
User Management
</propertie>
<!-- 包内的所有模型 -->
<models>
<model id="user">
sdsdsdsd
</model>
<model id="group"></model>
<model id="scope"></model>
<model id="meeting"></model>
</models>
<!-- 包内的所有文件 -->
<files>
<file type="html" />
<file type="html" />
<file type="css" />
<file type="css" />
<file type="ftl" />
<file type="ftl" />
<file type="html" />
</files>
</package>
下面是我弄的代码,求大神帮忙优化一下,
package comnan;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Demo1 {
public static void main(String[] args)
{
loopXMLFile();
}
private static void loopXMLFile()
{
try
{
// 把 XML文档转化为输入流
File file = new File("package.xinf");
// 得到dom解析器的工厂实例
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
// 从dom工厂获得dom解析器
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
// 解析 XML 文档的输入流,得到一个 Document
Document doc = dBuilder.parse(file);
// 判定当前元素节点是否拥有子节点
if (doc.hasChildNodes())
{
printNode(doc.getChildNodes());// ??
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private static void printNode(NodeList nodeList)
{
// 设置一个循环,如果i小于节点总数,则执行下面的语句
for (int i = 0; i < nodeList.getLength(); i++)
{
// 返回当前的节点
Node node = nodeList.item(i);
// 判断当前枚举值与节点类型是否相同,元素为1,属性为2,文本为3.
if (node.getNodeType() == Node.ELEMENT_NODE)
{ // ELEMENT_NODE枚举值
//判断是否是元素节点,是否有子节点。
if (node.getNodeType() == Node.ELEMENT_NODE&&node.hasChildNodes())
{
int count=0;
for (int k=0;k<node.getChildNodes().getLength();k++)
{
Node nodek = node.getChildNodes().item(k);
if (null !=nodek &&nodek.getNodeType()== Node.ELEMENT_NODE)
{
count++;
}
}
System.out.println("文本中:" + node.getNodeName() + "的节点数目为:" + count);
}
else if
(node.getNodeType() == Node.ELEMENT_NODE&&!"package".equals(node.getNodeName())&&node.hasChildNodes())
{
int count=0;
for (int k=0;k<node.getChildNodes().getLength();k++)
{
Node n = node.getChildNodes().item(k);
if (null !=n &&n.getNodeType()== Node.ELEMENT_NODE)
{
count++;
}
}
System.out.println("文本中:" + node.getNodeName() + "的节点数目为:" + count);
}
}
{
if (node.getNodeType() == Node.ELEMENT_NODE&&"package".equals(node.getNodeName()))
printNode(node.getChildNodes());
}
}
}
}
输出结果:
文本中:package的节点数目为:3
文本中:propertie的节点数目为:0
文本中:models的节点数目为:4
文本中:files的节点数目为:7
2016年01月21日 03点01分 1
1