【问题标题】:How to write invalid data to xml file in java如何在java中将无效数据写入xml文件
【发布时间】:2015-12-05 07:56:02
【问题描述】:

有没有办法在java中将以下数据写入xml。请帮帮我

<tag>  
   <abc="1"/>  
   <cde="a"/>  
   <xyz="3"/>  
</tag>  

【问题讨论】:

  • 是的。有很多方法可以做到这一点。你用谷歌搜索过同样的问题吗?
  • @Jabir 是的,我试过但找不到任何灵魂。因为解析器期望“abc”作为节点而不是属性。
  • 你不能说这是一个无效的xml。你如何获取数据?您可以重新格式化它以生成有效的 xml,也可以将其视为字符串。需要更多关于您需要它的信息吗?例如,将其写入文件或读取这样的字符串并映射到 java 对象等。

标签: java xml xml-parsing


【解决方案1】:

举个例子……

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

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileOutputStream;

public class Foobar {

    public static void main(String[] args) throws Exception {
        /* one way */
        FileOutputStream fileOutputStream = new FileOutputStream(new File("/tmp/foobar.txt"));
        String data = "<tag>  \n" +
                "   <abc=\"1\"/>  \n" +
                "   <cde=\"a\"/>  \n" +
                "   <xyz=\"3\"/>  \n" +
                "</tag>  ";

        fileOutputStream.write(data.getBytes());

        /* another way */
        Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Element tag = doc.createElement("tag");
        Attr abc = doc.createAttribute("abc");
        Attr cde = doc.createAttribute("cde");
        Attr xyz = doc.createAttribute("xyz");
        abc.setValue("1");
        cde.setValue("2");
        xyz.setValue("3");
        CDATASection cdataSection = doc.createCDATASection(makeInvalidTag(abc) + makeInvalidTag(cde) + makeInvalidTag(xyz));
        tag.appendChild(cdataSection);
        doc.appendChild(tag);
        StreamResult streamResult = new StreamResult(new File("/tmp/foobar2.txt"));
        DOMSource domSource = new DOMSource(doc);
        TransformerFactory.newInstance().newTransformer().transform(domSource, streamResult);
    }

    private static String makeInvalidTag(Attr attr) {
        return "\u003C" + attr.toString() + "/\u003E";
    }
}

【讨论】:

  • 感谢您的回答。但这不是我期望上面的代码会在 xml 文件中给出结果为
  • 对不起,我匆忙看错了你的问题。忘记文档并使用即。文件输出流。
  • 感谢您的回复。有没有办法使用第二种方法。我已经在使用第二种方法了
  • 实际上没有 CDATA,因为序列化程序将转义小于和大于字符的字符,否则它们会破坏 XML。我编辑了答案。这是一个丑陋的方式。为什么要编写无效的 XML?
  • 非常感谢@olli.puljula .. 它运行良好。在我们的要求中,客户只想以这种方式发送文件.. 该文件部分是 xml,部分不是
【解决方案2】:
  1. 创建文件:

    File file = new File(fileLocation);
    fileLocation= <Your_File_path>

  2. 创建文件写入器对象:

    FileWriter generateXML=new FileWriter(file);

  3. 你可以像下面这样在文件上写:

    generateXML.write("&lt;tag&gt;");

【讨论】:

    猜你喜欢
    • 2014-03-20
    • 2012-09-20
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多