java - 如何用 Java 浏览和显示 XML 内容

标签 java html xml dom sax

我在 Java 中遇到 DOM 问题... 这是 XML 代码:

<?xml version="1.0" encoding="UTF-8"?>
<bib>
<domain>
    <title>Specifications</title>
    <bib_ref>
        <year>March 2000</year>
        <title>MOF  1.3</title>
        <author>OMG</author>
        <weblink>D:\SALIM\Docs\Specifications\MOF1_3.pdf</weblink>
    </bib_ref>
    <bib_ref>
        <year>August 2002</year>
        <title>IDLto Java LanguageMapping Specification</title>
        <author>OMG</author>
        <weblink>D:\SALIM\Docs\Specifications\IDL2Java.pdf</weblink>
    </bib_ref>
    <bib_ref>
        <year>1999</year>
        <title>XML Metadata Interchange (XMI) Version 1.1</title>
        <author>OMG</author>
        <weblink>D:\SALIM\Docs\Specifications\xmi-1.1.pdf</weblink>
    </bib_ref>
    <bib_ref>
        <year>2002</year>
        <title>XML Metadata Interchange (XMI) Version 2</title>
        <author>"OMG</author>
        <weblink>D:\SALIM\Docs\Specifications\XMI2.pdf</weblink>
    </bib_ref>
    <bib_ref>
        <year>2002</year>
        <title>XMI Version 1Production of XML Schema Specification</title>
        <author>OMG</author>
        <weblink>D:\SALIM\Docs\Specifications\XMI1XSD.pdf</weblink>
    </bib_ref>
    <bib_ref>
        <year>2002</year>
        <title>EDOC</title>
        <author>OMG</author>
        <weblink>D:\SALIM\Docs\Specifications\EDOC02-02-05.pdf</weblink>
    </bib_ref>
</domain>
<domain>
    <title>Theses</title>
    <bib_ref>
        <year>Octobre 2001</year>
        <title>Echanges de Spécifications Hétérogènes et Réparties</title>
        <author>Xavier Blanc</author>
        <weblink>D:\SALIM\Docs\Theses\TheseXavier.pdf</weblink>
    </bib_ref>
    <bib_ref>
        <year>Janvier 2001</year>
        <title>Composition of Object-Oriented Software Design Models</title>
        <author>Siobhan Clarke</author>
        <weblink>D:\SALIM\Docs\Theses\SClarkeThesis.pdf</weblink>
    </bib_ref>
 ......
 ......

之后,在 Java main 函数中,我调用了 dispContent 函数:

public void dispContent (Node n) 
{
    
    String domainName = null;
    
    // we are in an element node
    if (n instanceof Element) {
        Element e = ((Element) n);
       
        // domain title
        if (e.getTagName().equals("title") && e.getParentNode().getNodeName().equals("domain")) {
            domainName = e.getTextContent();
            DomaineTemplate(domainName);
        }
        
        else if (e.getTagName().equals("bib_ref")) {
            NodeList ref = e.getChildNodes();

            for (int i = 0; i < ref.getLength(); i++) {
                Node temp = (Node) ref.item(i);
                
                if (temp.getNodeType() == Node.ELEMENT_NODE) {
                    if (temp.getNodeType() == org.w3c.dom.Node.TEXT_NODE)
                        continue;
                
                    out.println(temp.getNodeName() + " : " + temp.getTextContent() + "\n");
                }
            }
        }
        
        else {
            NodeList sub = n.getChildNodes();
            for(int i=0; (i < sub.getLength()); i++)
                dispContent(sub.item(i));

        }
    }
        /*else if (n instanceof Document) {
        NodeList fils = n.getChildNodes();
        for(int i=0; (i < fils.getLength()); i++) {
            dispContent(fils.item(i));
    
        }
    }*/
}

“domainTemplate”函数只是显示它的参数! 我的问题发生在我浏览 Java 中的“bib_ref”标签时。对于每个“bib_ref”循环,它显示所有“bib_ref”标签的所有内容......在一行中!我只想为每个“bib_ref”显示一个内容(年份、标题、作者和网络链接标签)。

这是我浏览 bib_ref 时显示的内容:

Specifications

year : March 2000 title : MOF 1.3 author : OMG weblink : D:\SALIM\Docs\Specifications\MOF1_3.pdf year : August 2002 title : IDLto Java LanguageMapping Specification author : OMG weblink : D:\SALIM\Docs\Specifications\IDL2Java.pdf year : 1999 title : XML Metadata Interchange (XMI) Version 1.1 author : OMG weblink : D:\SALIM\Docs\Specifications\xmi-1.1.pdf year : 2002 title : XML Metadata Interchange (XMI) Version 2 author : OMG weblink : D:\SALIM\Docs\Specifications\XMI2.pdf year : 2002 title : XMI Version 1Production of XML Schema Specification author : OMG weblink : D:\SALIM\Docs\Specifications\XMI1XSD.pdf year : 2002 title : EDOC author : OMG weblink : D:\SALIM\Docs\Specifications\EDOC02-02-05.pdf

Theses

year : Octobre 2001 title : Echanges de Sp�cifications H�t�rog�nes et R�parties author : Xavier Blanc weblink : D:\SALIM\Docs\Theses\TheseXavier.pdf year : Janvier 2001 title : Composition of Object-Oriented Software Design Models author : Siobhan Clarke weblink : D:\SALIM\Docs\Theses\SClarkeThesis.pdf year : Juin 2002 title : Contribution � la repr�sentation de processu par des techniques de m�ta mod�lisation author : Erwan Breton weblink : D:\SALIM\Docs\Theses\ErwanBretonThesis.pdf year : Octobre 2000 title : Technique de Mod�lisation et de M�ta mod�lisation author : Richard Lemesle weblink : D:\SALIM\Docs\Theses\RichardLemesle.pdf year : Juillet 2002 title : Utilsation d'agents mobiles pour la construction des services distribu�s author : Siegfried Rouvrais weblink : D:\SALIM\Docs\Theses\theserouvrais.pdf ... ...

你能帮帮我吗? 我只是 xml 和 java 的初学者,我正在搜索一些解决方案大约 3 个小时......非常感谢!

最佳答案

我调用了 dispContent(doc.getFirstChild());,其中 doc 是包含给定 xml 文件内容的文档。

假设:out.println()System.out.println()DomaineTemplate(domainName); 添加一个换行符(基于在你提供的输出上)

我在控制台中打印出以下内容:

Specifications

year : March 2000

title : MOF  1.3

author : OMG

weblink : D:\SALIM\Docs\Specifications\MOF1_3.pdf

year : August 2002

title : IDLto Java LanguageMapping Specification

author : OMG

weblink : D:\SALIM\Docs\Specifications\IDL2Java.pdf

year : 1999

title : XML Metadata Interchange (XMI) Version 1.1

author : OMG

weblink : D:\SALIM\Docs\Specifications\xmi-1.1.pdf

year : 2002

title : XML Metadata Interchange (XMI) Version 2

author : "OMG

weblink : D:\SALIM\Docs\Specifications\XMI2.pdf

year : 2002

title : XMI Version 1Production of XML Schema Specification

author : OMG

weblink : D:\SALIM\Docs\Specifications\XMI1XSD.pdf

year : 2002

title : EDOC

author : OMG

weblink : D:\SALIM\Docs\Specifications\EDOC02-02-05.pdf

Theses

year : Octobre 2001

title : Echanges de Spécifications Hétérogènes et Réparties

author : Xavier Blanc

weblink : D:\SALIM\Docs\Theses\TheseXavier.pdf

year : Janvier 2001

title : Composition of Object-Oriented Software Design Models

author : Siobhan Clarke

weblink : D:\SALIM\Docs\Theses\SClarkeThesis.pdf

If you're having an issue with "\n" creating a new line, you can try using what the System uses:

public static final String NEW_LINE = System.getProperty("line.separator");

如果您不想打印出“bib_ref”节点的每行之间的新行,请更改:

else if (e.getTagName().equals("bib_ref")) {
    NodeList ref = e.getChildNodes();

        for (int i = 0; i < ref.getLength(); i++) {
            Node temp = (Node) ref.item(i);

            if (temp.getNodeType() == Node.ELEMENT_NODE) {
                if (temp.getNodeType() == org.w3c.dom.Node.TEXT_NODE)
                    continue;

                 out.println(temp.getNodeName() + " : " + temp.getTextContent() + "\n");
            }
        }
}

到:

else if (e.getTagName().equals("bib_ref")) {
    NodeList ref = e.getChildNodes();

        for (int i = 0; i < ref.getLength(); i++) {
            Node temp = (Node) ref.item(i);

            if (temp.getNodeType() == Node.ELEMENT_NODE) {
                if (temp.getNodeType() == org.w3c.dom.Node.TEXT_NODE)
                    continue;

                 // Removed "\n":
                 out.println(temp.getNodeName() + " : " + temp.getTextContent());
            }
        }

        // Added out.println();
        out.println();
}

结果:

Specifications

year : March 2000
title : MOF  1.3
author : OMG
weblink : D:\SALIM\Docs\Specifications\MOF1_3.pdf

year : August 2002
title : IDLto Java LanguageMapping Specification
author : OMG
weblink : D:\SALIM\Docs\Specifications\IDL2Java.pdf

year : 1999
title : XML Metadata Interchange (XMI) Version 1.1
author : OMG
weblink : D:\SALIM\Docs\Specifications\xmi-1.1.pdf

year : 2002
title : XML Metadata Interchange (XMI) Version 2
author : "OMG
weblink : D:\SALIM\Docs\Specifications\XMI2.pdf

year : 2002
title : XMI Version 1Production of XML Schema Specification
author : OMG
weblink : D:\SALIM\Docs\Specifications\XMI1XSD.pdf

year : 2002
title : EDOC
author : OMG
weblink : D:\SALIM\Docs\Specifications\EDOC02-02-05.pdf

Theses

year : Octobre 2001
title : Echanges de Spécifications Hétérogènes et Réparties 
author : Xavier Blanc
weblink : D:\SALIM\Docs\Theses\TheseXavier.pdf

year : Janvier 2001
title : Composition of Object-Oriented Software Design Models
author : Siobhan Clarke
weblink : D:\SALIM\Docs\Theses\SClarkeThesis.pdf

关于java - 如何用 Java 浏览和显示 XML 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616864/

相关文章:

java - PWC1406 : Servlet. service() 抛出异常 java.io.IOException: Invalid chunk header 当客户端向服务器发送数据时

java - 如何在字符串数组中获取记录器值

java - 尝试添加 Jackson 库时出现 BeanCreationException

java - 出于有害目的在 XML 中注入(inject) Java 字节码

javascript - 使用 jQuery 选择器遍历 XMLDocument

java - Java 8 到 Java 7 的降级功能

java - 如何在 Java/Swing 中实现 Ctrl+Z/Command+Z?

php - Firefox 和 chrome 中的页面无法正确显示 ul

javascript - 将时间间隔存入数据库的方法

javascript - 将 js 转换为 php 以获得背景色 cookie