如何解决在Java中解析XML文件后如何调整输出?
我正在尝试通过使用递归函数来解析XML文档,但我不确定哪种数据的最佳格式(或者我应该说如何以何种格式保存已解析的文档)以便能够轻松转换它在JSON中。 这是代码:
private static void printNodeList(NodeList nodeList)
{
for (int count = 0; count < nodeList.getLength(); count++) //getLength of nodeList that is passed inside of function printNodeList
{
Node elemNode = nodeList.item(count); //assign name of element we are currently looking at to a Node "elemNode"
if (elemNode.getNodeType() == Node.ELEMENT_NODE) //if node we are currently looking at has type ELEMENT_NODE do next block of a code
{
// get node name and value
System.out.println("\nNode Name =" + elemNode.getNodeName()+ " [OPEN]");
System.out.println("Node Content =" + elemNode.getTextContent());
if (elemNode.hasAttributes()) //if node we are currently looking at has attributes then do this block of a code
{
NamedNodeMap nodeMap = elemNode.getAttributes(); //create nodeMap and pass it attributes of a node we are currently looking at
for (int i = 0; i < nodeMap.getLength(); i++) //getLength of nodeMap or look how many attributes there is for node that we are currently watching
{
Node node = nodeMap.item(i); //every attribute that is stored in nodeMap will be saved in node and his name and value will be printed out
System.out.println("attr name : " + node.getNodeName());
System.out.println("attr value : " + node.getNodeValue());
}
}
if (elemNode.hasChildNodes()) //if our element (element that we are currently watching at) still has child nodes left -> recursively call "printNodeList" function
{
//recursive call if the node has child nodes
printNodeList(elemNode.getChildNodes());
}
//output in console the name of node that we are done with
System.out.println("Node Name =" + elemNode.getNodeName()+ " [CLOSE]");
}
}
}
XML File用于代码,这就是我得到的output。 不知道如何丢失第一个“ Node Content = .....”,因为没有它,它会更干净甚至更易于处理数据?
这个想法是解析XML文件,然后保存它,然后通过使用一组转换规则将保存的文件转换为JSON。还是有一种无需保存已解析的XML文件即可直接转换为JSON的方法?从XML到JSON转换的整个方法也许是错误的?帮助。
解决方法
我有点想出如何修改输出的方法,但是它仍然缺少一些要点以JSON格式显示的要点,因此,如果有人有任何想法,请随时分享。任何帮助都很好,谢谢。 我可以使用以下方法调整输出:
public static void printNode(NodeList nList) {
//System.out.println(nList.getLength());
//nList.getLength() gives us cont of <> and </> under that class
for (int i = 0; i < nList.getLength(); i++) {
Node node = nList.item(i);
if (node.hasChildNodes()) { //check if node has childNodes
System.out.println("\"" + node.getNodeName() + "\":");
}
if(node.hasAttributes()){ //check if node have any attributes
System.out.println("->"+node.getAttributes().item(0));
//getAttributes() is going to get a list of attributes and we want only first one that's why we put "0" as a parameter
}
if(node.getChildNodes().getLength()==1){
//if childNode length is equal to 1 that means this is a leaf node (latest node in the tree)
System.out.println("---->"+node.getTextContent());
}
//recursive call
printNode(node.getChildNodes());
}
}
对于this_input,我可以获得this_output。我想尝试创建更像this的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。