在java中,使用for循环对使用int无效

在java中,使用for循环对使用int无效,java,xml,Java,Xml,我正在尝试使用java创建xml树。 我对爪哇有了全新的认识。 我想找到一些这方面的代码。 package ep; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transfo

我正在尝试使用java创建xml树。
我对爪哇有了全新的认识。
我想找到一些这方面的代码。

package ep;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class Tclass {

    public static void main(String argv[]) {

      try {

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        // root elements
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("products");
        doc.appendChild(rootElement);
        for(int x = 1; x < 20; x = x+1) {
        // staff elements
        Element staff = doc.createElement("product_id");
        rootElement.appendChild(staff);

        // set attribute to staff element
        Attr attr = doc.createAttribute("value");

        // shorten way
        staff.setAttribute("value", x);
        }
        // write the content into xml file
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File("file.xml"));

        // Output to console for testing
        // StreamResult result = new StreamResult(System.out);

        transformer.transform(source, result);

        System.out.println("File saved!");

      } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
      } catch (TransformerException tfe) {
        tfe.printStackTrace();
      }
    }
}
封装ep;
导入java.io.File;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Attr;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
公共类Tclass{
公共静态void main(字符串argv[]){
试一试{
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
//根元素
Document doc=docBuilder.newDocument();
Element rootElement=doc.createElement(“产品”);
doc.appendChild(rootElement);
对于(int x=1;x<20;x=x+1){
//工作人员
元素职员=doc.createElement(“产品标识”);
根元素.appendChild(staff);
//将属性设置为staff元素
Attr Attr=doc.createAttribute(“值”);
//缩短道路
staff.setAttribute(“值”,x);
}
//将内容写入xml文件
TransformerFactory TransformerFactory=TransformerFactory.newInstance();
Transformer Transformer=transformerFactory.newTransformer();
DOMSource=新的DOMSource(doc);
StreamResult=newstreamresult(新文件(“File.xml”);
//输出到控制台进行测试
//StreamResult结果=新的StreamResult(System.out);
变换(源、结果);
System.out.println(“文件已保存!”);
}捕获(ParserConfiguration异常pce){
pce.printStackTrace();
}捕获(TransformerException tfe){
tfe.printStackTrace();
}
}
}
它的工作非常出色。
但我尝试在它们上使用for循环来创建多个元素,然后在第40行返回错误
type元素中的方法setAttribute(String,String)不适用于参数(String,int)

我有什么问题吗
请帮忙。
谢谢…

当您这样做时:

staff.setAttribute("value", x);
替换为:

staff.setAttribute("value", ""+x);
你应该替换

staff.setAttribute("value", x);

元素#setAttribute(名称、值)
,此处该值是一个简单的
字符串
,在设置时不会对其进行解析。因此,任何标记(例如被识别为实体引用的语法)都被视为文本

因此,使用
String
作为值,而不是任何其他类型。因此,将
int
值转换为字符串

staff.setAttribute("value", Integer.toString(i)); // preferable as static 


您正在传入一个
int
,而它需要一个
字符串

 staff.setAttribute("value", String.valueOf(x));
for()-loop
替换为以下
for(整数x=1;x<20;x=x+1)

staff.setAttribute("value", x.toString());

谢谢这是解决。。。。(y) 您能否发布新的答案,以获取
staff.setAttribute的随机数(“value”,此处为随机数)像微笑:)我正在使用这个
Random rand=newrandom();整数值=兰特·奈克斯汀(50);//缩短方式选项卡\u id.setAttribute(“值”、“值”)但我想从20到50开始。它的起始值为0到50,您可以保持
Random rand=new Random()这一行超出了你的循环。很抱歉,这不是完美的工作我想将范围更改为0到50我想b/w 20到50
staff.setAttribute("value", ""+i);
staff.setAttribute("value", String.valueOf(i)); // preferable as static
 staff.setAttribute("value", String.valueOf(x));
staff.setAttribute("value", x.toString());