我有一个包含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) 我需要阅读较小的(最多几个MB,UTF-8编码的)XML文件,浏览各种元素和属性,或许修改一些并将XML再次写回磁盘(最好使用漂亮的缩进格式) .
什么是最符合我需求的XML解析器?有很多可供选择.我知道的有些是:
当然是JDK中的那个(我使用的是Java 6).我对Xerces很熟悉,但发现它很笨重.
建议?
在Java中,如何将表示XML片段的String转换为XML文档?
例如
String newNode = "<node>value</node>"; // Convert this to XML
Run Code Online (Sandbox Code Playgroud)
然后将此节点作为给定节点的子节点插入org.w3c.dom.Document中?
目前,我们的Java应用程序使用制表符分隔的*.cfg文件中保存的值.我们需要更改此应用程序,以便它现在使用XML文件.
为了从这个文件中读取值,最好/最简单的库是什么?
是否有简单的方法在Java中读写Xml?
我之前使用过SAX解析器,但我记得它不直观,我看了几个JAXB的教程,看起来很复杂.
我不知道我是否被C#的XmlDocument类所破坏,但我想要做的就是创建一个Xml文档,它代表一组类及其成员(有些是属性,有些是元素).
我会研究序列化,但XML必须具有与ac#app输出相同的格式,我将其逆向工程化为Java.
我有XML的小字符串,如:
String myxml = "<resp><status>good</status><msg>hi</msg></resp>";
Run Code Online (Sandbox Code Playgroud)
我想查询以获取其内容.
最简单的方法是什么?
我有两个我创建的XML文档,我想将这两个文档组合在一个新的信封中.所以我有
<alert-set>
<warning>National Weather Service...</warning>
<start-date>5/19/2009</start-date>
<end-date>5/19/2009</end-date>
</alert-set>
Run Code Online (Sandbox Code Playgroud)
和
<weather-set>
<chance-of-rain type="percent">31</chance-of-rain>
<conditions>Partly Cloudy</conditions>
<temperature type="Fahrenheit">78</temperature>
</weather-set>
Run Code Online (Sandbox Code Playgroud)
我想要做的是在根节点内组合两个:<DataSet>组合文档</ DataSet>
我已经尝试创建临时文档并用文档的根节点替换子项:
<DataSet>
<blank/>
<blank/>
</DataSet>
Run Code Online (Sandbox Code Playgroud)
我希望用两个文件的根元素替换这两个空格,但我得到"WRONG_DOCUMENT_ERR:一个节点用在与创建它的文档不同的文档中." 我尝试采用并导入根节点,但我得到了同样的错误.
是否有一些简单的方法来组合文档而无需通读并为每个节点创建新元素?
编辑:示例代码片段现在只是尝试将一个移动到"空白"文档... importNode和adoptNode函数不能导入/采用Document节点,但它们无法导入元素节点及其子树...或者如果它确实,它似乎不适用于追加/替换仍然.
Document xmlDoc; //created elsewhere
Document weather = getWeather(latitude, longitude);
Element weatherRoot = weather.getDocumentElement();
Node root = xmlDoc.getDocumentElement();
Node adopt = weather.adoptNode(weatherRoot);
Node imported = weather.importNode(weatherRoot, true);
Node child = root.getFirstChild();
root.replaceChild(adopt, child); //initially tried replacing the <blank/> elements
root.replaceChild(imported, child);
root.appendChild(adopt);
root.appendChild(imported);
root.appendChild(adopt.cloneNode(true));
Run Code Online (Sandbox Code Playgroud)
所有这些抛出DOMException:WRONG_DOCUMENT_ERR:节点用于与创建它的文档不同的文档中.
我想我将不得不弄清楚如何使用stax或只是重新阅读文档并创建新元素......但是,为了合并文档,这似乎太多了.
如何创建以下XML
使用Java DOM
,我想从头开始创建它.有什么办法吗?我不想读它并克隆它,我只是想通过DOM
方法创建它.
Java
例:
Node booking=new Node();
Node bookingID=new Node();
booking.add(bookingID);
Run Code Online (Sandbox Code Playgroud)
XML
例:
<tns:booking>
<tns:bookingID>115</tns:bookingID>
<tns:type>double</tns:type>
<tns:amount>1</tns:amount>
<tns:stayPeriod>
<tns:checkin>
<tns:year>2013</tns:year>
<tns:month>11</tns:month>
<tns:date>14</tns:date>
</tns:checkin>
<tns:checkout>
<tns:year>2013</tns:year>
<tns:month>11</tns:month>
<tns:date>16</tns:date>
</tns:checkout>
</tns:stayPeriod>
</tns:booking>
Run Code Online (Sandbox Code Playgroud) 我需要帮助了解使用java将XML文件转换为CSV文件所涉及的步骤.这是一个XML文件的示例
<?xml version="1.0"?>
<Sites>
<Site id="101" name="NY-01" location="New York">
<Hosts>
<Host id="1001">
<Host_Name>srv001001</Host_Name>
<IP_address>10.1.2.3</IP_address>
<OS>Windows</OS>
<Load_avg_1min>1.3</Load_avg_1min>
<Load_avg_5min>2.5</Load_avg_5min>
<Load_avg_15min>1.2</Load_avg_15min>
</Host>
<Host id="1002">
<Host_Name>srv001002</Host_Name>
<IP_address>10.1.2.4</IP_address>
<OS>Linux</OS>
<Load_avg_1min>1.4</Load_avg_1min>
<Load_avg_5min>2.5</Load_avg_5min>
<Load_avg_15min>1.2</Load_avg_15min>
</Host>
<Host id="1003">
<Host_Name>srv001003</Host_Name>
<IP_address>10.1.2.5</IP_address>
<OS>Linux</OS>
<Load_avg_1min>3.3</Load_avg_1min>
<Load_avg_5min>1.6</Load_avg_5min>
<Load_avg_15min>1.8</Load_avg_15min>
</Host>
<Host id="1004">
<Host_Name>srv001004</Host_Name>
<IP_address>10.1.2.6</IP_address>
<OS>Linux</OS>
<Load_avg_1min>2.3</Load_avg_1min>
<Load_avg_5min>4.5</Load_avg_5min>
<Load_avg_15min>4.2</Load_avg_15min>
</Host>
</Hosts>
</Site>
</Sites>
Run Code Online (Sandbox Code Playgroud)
这是生成的CSV文件.
site_id, site_name, site_location, host_id, host_name, ip_address, operative_system, load_avg_1min, load_avg_5min, load_avg_15min
101, NY-01, New York, 1001, srv001001, 10.1.2.3, Windows, 1.3, 2.5, 1.2
101, NY-01, New York, 1002, srv001002, 10.1.2.4, Linux, 1.4, …
Run Code Online (Sandbox Code Playgroud) 显然每个Java程序员和他的狗都写了几个开源框架.我可以理解,有时框架是有用的,但在Java社区中却恰恰相反:没有使用尽可能多的框架,它被视为"非专业态度".
我的团队成员中有一半害怕编写任何代码来解决技术问题,只要他们必须添加功能,他们就可以使用google来获取框架.
当然,没有人可以成为一切的专家,但为什么你需要(例如)在大约20个框架(我上次计算)中选择服务一个简单的休息api?
它是否与Java相关并且缺少标准库(xml解析为一个)?或者它与"面向CV的编程"有关?