我有一个包含XML的Java字符串,没有换行符或缩进.我想把它变成一个格式很好的XML的字符串.我该怎么做呢?
String unformattedXml = "<tag><nested>hello</nested></tag>";
String formattedXml = new [UnknownClass]().format(unformattedXml);
Run Code Online (Sandbox Code Playgroud)
注意:我的输入是一个字符串.我的输出是一个字符串.
(基本)模拟结果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<tag>
<nested>hello</nested>
</tag>
</root>
Run Code Online (Sandbox Code Playgroud) 我用Java读取了这个代码的XML文件:
File file = new File("file.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
NodeList nodeLst = doc.getElementsByTagName("record");
for (int i = 0; i < nodeLst.getLength(); i++) {
Node node = nodeLst.item(i);
...
}
Run Code Online (Sandbox Code Playgroud)
那么,我如何从节点实例中获取完整的xml内容?(包括所有标签,属性等)
谢谢.
我创建了一些将地图写入XML的代码.它似乎工作但文件打印没有新行.所以在任何XML编辑器中它只在一行上.如何为每个孩子打印到新行?
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
Element vdata = doc.createElement("vouchdata");
doc.appendChild(vdata);
for (Entry<String, String> entry : vouchMap.entrySet()) {
Element udata = doc.createElement("vouch");
Attr vouchee = doc.createAttribute("name");
vouchee.setValue(entry.getKey());
udata.setAttributeNode(vouchee);
Attr voucher = doc.createAttribute("vouchedBy");
voucher.setValue(entry.getValue());
udata.setAttributeNode(voucher);
vdata.appendChild(udata);
}
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("vouchdata.xml"));
// Output to console for testing
// StreamResult result = new …Run Code Online (Sandbox Code Playgroud) 请注意,一些读写简单XML文件(由DTD定义)的现有代码正在使用不推荐使用的类。想要将以下内容替换为不推荐使用的类。由于使用Java 6,因此希望使用包含在XML处理中的软件包,而不是使用第三方工具(尽管可以使用jdom之类的标准工具)。
OutputFormat format = new OutputFormat( doc );
format.setLineWidth( 100 );
format.setIndenting( true );
format.setIndent( 2 );
Run Code Online (Sandbox Code Playgroud)
这是尝试使用TransformerFactory的尝试,在各种SO答案中都有提及。在上面指定缩进似乎不太困难,尽管不像预期的那么明显。但是如何指定行长呢?
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", Integer.valueOf(4));
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
Run Code Online (Sandbox Code Playgroud)
另请注意,该文件是使用DOS格式创建的,而上述格式是unix格式。有没有比这更好的方法了?这是一个非常简单的文件,不需要太多格式,只希望它除了程序外还可以被人读取。
在c#中,我们可以使用Image.HorizontalResolution和Image.VerticalResolution.
但在java中,如何获得它?
我找到了ImageInfo.java,但它只支持一些图像类型.
我正在尝试从Java创建XML并且在缩进时遇到问题.在以下代码中,您可以看到OutputKeys.INDENT设置为yes...
//set up a transformer
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
//create string from xml tree
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();
//print xml
System.out.println(xmlString);
Run Code Online (Sandbox Code Playgroud)
但它似乎没有影响,输出是:
<dataset id="1"><br>
<path></path><br>
<session id="1"><br>
<method><br>
<timestamp>a timestamp</timestamp><br>
<signiture><br>
<classPath></classPath><br>
<name>methodName</name><br>
<declarationType>String</declarationType><br>
<parameters><br>
<parameter>String</parameter><br>
<parameter>int</parameter><br>
</parameters><br>
</signiture><br>
<arguments><br>
<argument>SomeValue</argument><br>
<argument>AnotherValue</argument><br>
</arguments><br>
<return>ReturnValue</return><br>
</method><br>
</session><br>
</dataset><br>
Run Code Online (Sandbox Code Playgroud) 我想将一些简单的数据模型序列化为xml,我一直在使用标准的java.org.w3c相关代码(见下文),缩进比没有"OutputKeys.INDENT"好,但还有一点点剩下的东西 - 适合儿童元素的缩进.
我知道之前已经在stackoverflow上询问过,但是这个配置对我来说不起作用,这是我正在使用的代码:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
doc = addItemsToDocument(doc);
// The addItemsToDocument method adds childElements to the document.
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", new Integer(4));
// switching to setAttribute("indent-number", 4); doesn't help
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(outFile);
// outFile is a regular File outFile = new File("some/path/foo.xml");
transformer.transform(source, result);
Run Code Online (Sandbox Code Playgroud)
产生的输出是:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<stuffcontainer> …Run Code Online (Sandbox Code Playgroud)