XML文書内に改行を含めたい。 2007/07/24

XMLファイルに改行を含めたい場合、文字参照?を使用します。


具体的には、
スペース文字(#x20)
改行(#xA)
タブ(#x9)
復帰+改行(#xD#xA)
復帰(#xD)
を使用するようですね。

それで、XMLには下記のように記述します。

<?xml version="1.0" encoding="UTF-8"?>
<a>
<b prop="スペース&#x20;です。" />
<b prop="改行&#xA;です。" />
<b prop="タブ&#x9;です。" />
<b prop="復帰+改行&#xD;&#xA;です。" />
<b prop="復帰&#xD;です。" />
</a>




javaのプログラムを利用してパースします。
結果は、
nodename:[#text] nodevalue:[
]
nodename:[b] nodevalue:[null]
attr:[prop] attrvalue:[スペース です。]
nodename:[#text] nodevalue:[
]
nodename:[b] nodevalue:[null]
attr:[prop] attrvalue:[改行
です。]
nodename:[#text] nodevalue:[
]
nodename:[b] nodevalue:[null]
attr:[prop] attrvalue:[タブ です。]
nodename:[#text] nodevalue:[
]
nodename:[b] nodevalue:[null]
attr:[prop] attrvalue:[復帰+改行
です。]
nodename:[#text] nodevalue:[
]
nodename:[b] nodevalue:[null]
attr:[prop] attrvalue:[復帰
です。]
nodename:[#text] nodevalue:[
]


下記のコードを利用しました。

import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class TestReadXml {

public static void main(String[] args) throws ParserConfigurationException,
SAXException, IOException {
a();
}

public static void println(String s) {
System.out.println(s);
}

public static void printNode(NodeList list) {
if (list == null)
return;
Node node;
for (int i = 0; (node = list.item(i)) != null; i++) {
println("nodename:[" + node.getNodeName() + "] nodevalue:[" + node.getNodeValue() + "]");
printAttr(node);
printNode(node.getChildNodes());
}
}

public static void printAttr(Node node) {
NamedNodeMap attrMap = node.getAttributes();
if(attrMap == null) return;
int attrs = attrMap.getLength();
for (int i = 0; i < attrs; i++) {
Node attr = attrMap.item(i);
println(" attr:[" + attr.getNodeName() + "] attrvalue:[" + attr.getNodeValue() + "]");
}
}

public static void a() throws ParserConfigurationException, SAXException,
IOException {
InputStream inputStream = TestReadXml.class
.getResourceAsStream("a.xml");

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(inputStream);

Element element = doc.getDocumentElement();
NodeList list = element.getChildNodes();
printNode(list);
}
}


: