请高手们指点下,下面的代码,动态为写入xml节点属性值,为什么插入到xml节点属性值都是相同的呢?急急急
List<Element> list=new ArrayList<Element>();
list = doc.selectNodes("/chart/dataset/set");
if(!list.isEmpty()) {
int i=1;
for(Element element : list) {
if(i<=list.size()/2){
for(String strzj : zj){
element.addAttribute("value",strzj);
}
}else{
for(String strzjl : zjl){
element.addAttribute("value",strzjl);
}
}
i++;
}
}
try {
XMLWriter output = new XMLWriter(new FileWriter(
new File("E:/MSLine.xml")));
output.write(doc);
output.close();
} catch (Exception e) {
}
} 展开
每次输出的都是当前list的最后一个值
这里就要用的你迭代用的i 用get(i)去具体的值
public static void main(String[] args) throws DocumentException {
// TODO Auto-generated method stub
List<String> zj = new ArrayList<String>();
List<String> zjl = new ArrayList<String>();
zj.add("1");
zj.add("2");
zj.add("3");
zj.add("4");
zjl.add("a");
zjl.add("b");
zjl.add("c");
zjl.add("d");
String path = "D:\***\\NewFile.xml";
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(path);
Test2.update1Xml(doc, zj, zjl);
}
public static void update1Xml(Document doc, List<String> zj,List<String> zjl) {
List<Element> list = new ArrayList<Element>();
System.out.println(doc.asXML());
list = doc.selectNodes("//chart/dataset/set");
if (!list.isEmpty()) {
int i = 1;
for (Element element : list) {
if (i <= list.size() / 2) {
element.addAttribute("value", zj.get(i - 1).toString());
} else {
element.addAttribute("value",zjl.get(i - (list.size() / 2) - 1).toString());
}
i++;
}
}
try {
System.out.println(doc.asXML());
XMLWriter output = new XMLWriter(new FileWriter(new File("E:/MSLine.xml")));
output.write(doc);
output.close();
} catch (Exception e) {
}
}
输出结果
<?xml version="1.0" encoding="UTF-8"?>
<chart>
<dataset>
<set value="1"/>
<set value="2"/>
<set value="3"/>
<set value="4"/>
</dataset>
<dataset>
<set value="a"/>
<set value="b"/>
<set value="c"/>
<set value="d"/>
</dataset>
</chart>
怎么做到如果列数大于节点数,自动增加节点啊
读取到你所要添加的上级节点 就可以作相应的节点 增加
element.addElement("set").addAttribute("value", children.get(j).toString());
添加节点 赋值
对于dataset 节点 我没有处理 其实和set节点 可以做同样的操作,这里确定知道 节点名称 推荐 使用迭代的方式读取和添加节点。不好意思 我这还有点事 就没有写上去。
public static void main(String[] args) throws Exception {
List<String> zj = new ArrayList<String>();
List<String> zjl = new ArrayList<String>();
zj.add("1");zj.add("2");zjl.add("a");zjl.add("b");zjl.add("c");zjl.add("d");zjl.add("e");
String path = Test2.rootPath+"NewFile.xml";
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(path);
List list=new ArrayList();list.add(zj);list.add(zjl);
Test2.update1Xml(doc,list);
}
public static void update1Xml(Document doc, List<List> listChildren) {
List<Element> list = new ArrayList<Element>();
List<Element> listdate = new ArrayList<Element>();
listdate = doc.selectNodes("//chart/dataset");
if (!listdate.isEmpty()) {
int sizeroot=listdate.size()>listChildren.size()?listChildren.size():listdate.size();
for (int i=0;i<sizeroot;i++) {
Element element=listdate.get(i);
List<Element> listc=element.elements();
if(listc.size()>listChildren.get(i).size()){
List<String> children=listChildren.get(i);
for(int j=0;j<listChildren.get(i).size();j++){
listc.get(j).addAttribute("value", children.get(j).toString());}
}else{
for(int j=0;j<listChildren.get(i).size();j++){
List<String> children=listChildren.get(i);
if(j<listc.size()){
listc.get(j).addAttribute("value", children.get(j).toString());
}else{
element.addElement("set").addAttribute("value", children.get(j).toString());
}}}}}
XMLWriter output = new XMLWriter(new FileWriter(new File(Test2.rootPath+"MSLine.xml")));
output.write(doc);
output.close();
}
NewFile
MSLine
一个使用系统;
使用的System.Xml;
命名空间ConsoleTest
{
类计划
{< BR /静态无效的主要(字串[] args)
{
的XmlDocument doc的=新的XmlDocument();
doc.Load(Datasource.xml);/ /加载数据
XmlNode的节点doc.SelectSingleNode(以下简称“细则”);
诠释maxId = Convert.ToInt32((节点?的XmlElement)的getAttribute(maxId“)); / /获取当前最大的ID <BR /了Console.Writeline(maxId);
}
}
}
/ /使用LINQ to
使用系统;
使用系统。 LINQ的;
命名空间ConsoleTest
{
类计划
{
静态无效的主要(字串[] args)
{<XML。 / XDocument的DOC = XDocument.Load(“Datasource.xml”);/ /将数据
诠释maxId。= Convert.ToInt32((doc.FirstNode为一个XElement)。的属性(“maxId”)。价值); / /获取当前最大的ID
maxId将Console.WriteLine();
}
}
}