如何使用java让XML节点中的属性换行?如下所示!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用java让XML节点中的属性换行?如下所示!相关的知识,希望对你有一定的参考价值。

<appinfo
launcher:packageName="com.nqmobile.antivirus20"
launcher:className="com.netqin.antivirus.AntiVirusSplash"
launcher:screen="3"
launcher:x="0"
launcher:y="2"
launcher:appindex="8" />

一般想要改变xml的内容
分两步走,没有什么很好的api可以给你直接调用
1, 解析xml
2, 重新生成xml

在重新生成xml的时候 内容就随便你控制啦
参考技术A 属性不需要换行,获取属性时是通过属性名获取值的,所以解析的时候有没有换行都一样,也许 参考技术B 这个换行没意义啊!获取属性内容只要属性名就行了 参考技术C 不行 参考技术D 没有好办法

【求助】Dom4j 生成xml,节点增加属性时,属性值中有特殊字符,如何做到不转义

如下代码,生成的xml中,“leaf”节点有个key属性,其属性值为“a>b”,但是生成的xml将“>”转义成“>”了,求问如果做到不转义。

```
public static void main(String[] args)
Document document = DocumentHelper.createDocument();
Element root= document.addElement("root");
Element element = root.addElement("leaf");
String str = "a>b";
element.addAttribute("key", str);
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");
Writer writer;
try
writer = new FileWriter("a.xml");
XMLWriter xmlWriter = new XMLWriter(writer, outputFormat);
xmlWriter.setEscapeText(false);// 并不能解决问题!!!
xmlWriter.write(document);
xmlWriter.close();
catch (IOException e)
e.printStackTrace();


```
实际生成的xml:
<?xml version="1.0" encoding="utf-8"?>
<root>
<leaf key="a>b"/>
</root>
期望生成的xml:
<?xml version="1.0" encoding="utf-8"?>
<root>
<leaf key="a>b"/>
</root>

setEscapeText(false) 只是能改变 escapeElementEntities(String st) 中的参数,主要能改变文本里面如:
<root> aaaa>bbbb <root/> 中aaaa>bbbb的中的>不转变
对于Attribute 里面的特殊字符,我查了好久的原码发现人家里面是从
protected void writeEscapeAttributeEntities(String txt) throws IOException
if (txt != null)
String escapedText = escapeAttributeEntities(txt);
writer.write(escapedText);

//(在XMLWriter类中第1174行)
里面有个 escapeAttributeEntities(txt); 这个是专门用来转变Attribute 里面的特殊字符的,
所以要想解决这个问题,我是用了继承,写了一个
public class MyXMLWriter extends XMLWriter
......
protected void writeEscapeAttributeEntities(String txt) throws IOException
if (txt != null)
//String escapedText = escapeAttributeEntities(txt);
writer.write(txt);


.......

直接注释了原码中的//StringescapedText=escapeAttributeEntities(txt);
就完美解决了。
参考技术A 我通过Dom4j读取file节点的append属性值的时候,当该节点没有设置append的值,读取的数据为空,但我想当没有显示声明值的时候,读取到的是xsd文件中设置的默认值,有人做过类

以上是关于如何使用java让XML节点中的属性换行?如下所示!的主要内容,如果未能解决你的问题,请参考以下文章

使用Java生成XML文件时,如何能让文件自动换行?

如何在java上获取根节点属性

java如何读取xml节点元素值?

java中使用xpath读取xml指定节点的属性的名称列表

java语句如何获取XML文件的节点值

如何在复制/粘贴web.config XML节点后阻止自动回车(换行)?