请高手们指点下,下面的代码,动态为写入xml节点属性值,为什么插入到xml节点属性值都是相同的呢?急急急

publicstaticvoidupdate1Xml(Documentdoc,List<String>zj,List<String>zjl){List<Element>l... public static void update1Xml(Document doc,List<String> zj,List<String> zjl) {
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) {
}
}
展开
 我来答
百度网友e5a8a32
2013-01-21
知道答主
回答量:11
采纳率:0%
帮助的人:1.7万
展开全部
主要是你的循环 有问题

每次输出的都是当前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

来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
司徒一菲
2013-01-20 · TA获得超过4637个赞
知道大有可为答主
回答量:8629
采纳率:0%
帮助的人:3202万
展开全部
/ /使用的XML版本
一个使用系统;
使用的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();
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式