如何在java中用XML设置节点的文本内容?

如何在java中用XML设置节点的文本内容?,java,xml,Java,Xml,举个例子: <PARAMETER FIELD="QUERYSTORE_TYPE" LABEL="Query Type" NAME="QUERYSTORE" NUM_ROW="40"> <DEFAULT>""</DEFAULT> </PARAMETER> <PARAMETER FIELD="GUESS_SCHEMA" LABEL="Guess Schema" NAME="GUESS_SCHEMA" NUM_ROW="40">

举个例子:

<PARAMETER FIELD="QUERYSTORE_TYPE" LABEL="Query Type" NAME="QUERYSTORE" NUM_ROW="40">
    <DEFAULT>""</DEFAULT>
</PARAMETER>

<PARAMETER FIELD="GUESS_SCHEMA" LABEL="Guess Schema" NAME="GUESS_SCHEMA" NUM_ROW="40">
    <DEFAULT></DEFAULT>
</PARAMETER>

<PARAMETER FIELD="MEMO_SQL" LABEL="Query" NAME="QUERY" NUM_ROW="45" REQUIRED="true">
    <DEFAULT>"select id, name from employee"</DEFAULT>
</PARAMETER>

我该怎么做?

您的代码没有问题。您是试图覆盖该文件还是写入新文件

foo.xml 从员工中选择id、姓名 xmlunquoteeExample.java 导入java.io.*; 导入javax.xml.parsers.*; 导入javax.xml.transform.*; 导入javax.xml.transform.dom.DOMSource; 导入javax.xml.transform.stream.StreamResult; 导入org.w3c.dom.*; 导入org.xml.sax.SAXException; 公共类xmlunquoteeExample{ 公共静态无效字符串[]args{ 文件文件; 试一试{ doc=readXmlFileresources/foo.xml; System.out.println; printDocumentdoc,System.out; removeQuotesdoc; System.out.println; printDocumentdoc,System.out; }捕获异常e{ e、 打印跟踪; } } 公共静态文档readXmlFileString文件名 抛出ParserConfiguration异常、SAXException、IOException{ 输入流为; 文件建设者工厂; 文档生成器; is=ClassLoader.getSystemResourceAsStreamfilename; factory=DocumentBuilderFactory.newInstance; factory.setNamespaceAwaretrue; builder=factory.newDocumentBuilder; 返回builder.parsenew ByteArrayInputStreamtoByteArrayis,16384; } 公共静态字节[]toByteArrayInputStream为,int bufferSize引发IOException{ ByteArrayOutputStream缓冲区=新建ByteArrayOutputStream; 国际nRead; 字节[]数据=新字节[bufferSize]; 而nRead=is.readdata,0,data.length!=-1{ buffer.writedata,0,nRead; } buffer.flush; 返回buffer.toByteArray; } 公共静态作废打印文档文档,输出流输出 抛出IOException、TransformerException{ TransformerFactory tf=TransformerFactory.newInstance; 变压器=tf.新变压器; transformer.setOutputPropertyYoutPutKeys.OMIT_XML_声明,否; transformer.setOutputPropertyYoutPutKeys.METHOD,xml; transformer.setOutputPropertyYoutPutKeys.INDENT,是; transformer.setOutputPropertyYoutPutKeys.ENCODING,UTF-8; transformer.setOutputProperty {http://xml.apache.org/xslt}缩进量,4; transformer.transformnew DOMSourcedoc,新StreamResult 新的OutputStreamWriterout,UTF-8; } 公共静态作废removeQuotesDocument文档{ NodeList nList=doc.getElementsByTagname参数; 对于int temp=0;temp可能是您没有将修改后的文档写入某个输出文件?以下是方法:

TransformerFactory trf = TransformerFactory.newInstance();
Transformer transformer = trf.newTransformer();
StreamResult result = new StreamResult(new FileOutputStream( "upd.xml" ));
DOMSource source = new DOMSource( document );
transformer.transform(source, result);
对于第二个问题,请跟踪引用并添加属性:

Boolean quotes = false;
for( int k = 0; k < nl.getLength(); k++ ){
    String txt = nl.item(k).getTextContent();
    if( txt.indexOf('"') >= 0 ){
        quotes = true;
    }
    // ...
}
eElement.setAttribute("encode", quotes.toString() );

您已经有了一个有效的答案,但我想用以下方法展示一个简短的解决方案:

这个程序用更少的代码行打印出相同的结果

<!-- BEFORE -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PARAMETERS>
    <PARAMETER FIELD="QUERYSTORE_TYPE" LABEL="Query Type" NAME="QUERYSTORE" NUM_ROW="40">
        <DEFAULT>""</DEFAULT>
    </PARAMETER>

    <PARAMETER FIELD="GUESS_SCHEMA" LABEL="Guess Schema" NAME="GUESS_SCHEMA" NUM_ROW="40">
        <DEFAULT/>
    </PARAMETER>

    <PARAMETER FIELD="MEMO_SQL" LABEL="Query" NAME="QUERY" NUM_ROW="45" REQUIRED="true">
        <DEFAULT>"select id, name from employee"</DEFAULT>
    </PARAMETER>
</PARAMETERS>
<!-- AFTER -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PARAMETERS>
    <PARAMETER FIELD="QUERYSTORE_TYPE" LABEL="Query Type" NAME="QUERYSTORE" NUM_ROW="40">
        <DEFAULT/>
    </PARAMETER>

    <PARAMETER FIELD="GUESS_SCHEMA" LABEL="Guess Schema" NAME="GUESS_SCHEMA" NUM_ROW="40">
        <DEFAULT/>
    </PARAMETER>

    <PARAMETER FIELD="MEMO_SQL" LABEL="Query" NAME="QUERY" NUM_ROW="45" REQUIRED="true">
        <DEFAULT>select id, name from employee</DEFAULT>
    </PARAMETER>
</PARAMETERS>
TransformerFactory trf = TransformerFactory.newInstance();
Transformer transformer = trf.newTransformer();
StreamResult result = new StreamResult(new FileOutputStream( "upd.xml" ));
DOMSource source = new DOMSource( document );
transformer.transform(source, result);
Boolean quotes = false;
for( int k = 0; k < nl.getLength(); k++ ){
    String txt = nl.item(k).getTextContent();
    if( txt.indexOf('"') >= 0 ){
        quotes = true;
    }
    // ...
}
eElement.setAttribute("encode", quotes.toString() );
public class RemoveDoubleQuotes {

public interface Projection {

    public interface Subprojection {
        @XBRead(".")
        String getValue();

        @XBWrite(".")
        void setValue(String value);
    }

    @XBRead("//DEFAULT")
    List<Subprojection> getAllDefaults();
}

public static void main(final String[] args) throws IOException {
    Projection projection = new XBProjector(Flags.TO_STRING_RENDERS_XML).io().url("resource://test.xml").read(Projection.class);
    for (Subprojection s : projection.getAllDefaults()) {
        s.setValue(s.getValue().replaceAll(Pattern.quote("\""), ""));
    }
    System.out.println(projection.toString());
}
}