package test.andy.xml;
import java.io.IOException;
import javax.xml.bind.JAXBException;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
public class TestXML {
public static void main(String[] args) throws XMLStreamException,
FactoryConfigurationError {
XMLStreamWriter writer = XMLOutputFactory.newInstance()
.createXMLStreamWriter(System.out);
writer.writeProcessingInstruction("xml",
"version=\"1.0\" encoding=\"ISO-8859-1\"");
// 写入根节点
writer.writeStartElement("elXmlIniPlus");
writer.writeStartElement("Section");
writer.writeAttribute("SectionName", "test");
writer.writeStartElement("elXmlProperty");
// 将项中值写入到Attribute节点中
writer.writeStartElement("Attribute");
writer.writeAttribute("key", "comment");
writer.writeAttribute("value", "&&&line1\nline2\nline3");
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndElement();
// 关闭根节点
writer.writeEndElement();
writer.flush();
writer.close();
}
}
输出结果:
我在C#上做了一个类似的代码,输出结果如下:
Java中,对于“&”字符做了转义,但是对于"\n"字符没有做转义,这里应该是有问题的吧?因为对于xml解析,“\n”是会被解析为空格的。而C#的输出就是我预期想得到的,对于“&”字符做了转义,对于"\n"字符也做了转义。
为什么Java中处理xml时不对"\n"字符做转义?有没有办法使得它对"\n"字符做转义?(不希望生成xml后再对它执行遍历或者正则替换换行符)。
问题补充:
补充c#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
namespace TestXML
{
class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.Default;
//settings.Indent = true;
XmlWriter writer = null;
try
{
writer = XmlWriter.Create(sw, settings);
//写入头声明
writer.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"ISO-8859-1\"");
//写入根节点
writer.WriteStartElement("elXmlIniPlus");
writer.WriteStartElement("Section");
writer.WriteAttributeString("SectionName", "Test");
writer.WriteStartElement("elXmlProperty");
//将项中值写入到Attribute节点中
writer.WriteStartElement("Attribute");
writer.WriteAttributeString("key", "comment");
writer.WriteAttributeString("value", "&&&line1\nline2\nline3");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
//关闭根节点
writer.WriteEndElement();
}
catch (Exception e)
{
throw e;
}
finally
{
if (null != writer)
writer.Close();
}
System.Console.Write(sb.ToString());
}
}
}
问题补充:
能不能给出一段修改后的java代码,使其输出跟C#代码的输出是一致的?
这篇博客探讨了Java在处理XML输出时,为何不对'
'字符进行转义的问题,对比了C#的处理方式。作者期望在不手动替换的情况下,使Java代码能对'
'字符进行转义。博客提供了C#的代码示例,并寻求修改后的Java代码以达到相同效果。
964

被折叠的 条评论
为什么被折叠?



