1

我在使用 DOM 的 Java 中遇到问题......这是 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 主函数中,我调用了刚刚存在的 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));
    
        }
    }*/
}

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

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

规格

年份:2000 年 3 月标题:MOF 1.3 作者:OMG 链接:D:\SALIM\Docs\Specifications\MOF1_3.pdf 年份:2002 年 8 月标题:IDLto Java LanguageMapping 规范作者:OMG 链接:D:\SALIM\Docs\Specifications\IDL2Java .pdf 年份:1999 标题:XML 元数据交换 (XMI) 版本 1.1 作者:OMG 网络链接:D:\SALIM\Docs\Specifications\xmi-1.1.pdf 年份:2002 标题:XML 元数据交换 (XMI) 版本 2 作者:OMG链接:D:\SALIM\Docs\Specifications\XMI2.pdf 年份:2002 标题:XMI 版本 1 XML 模式规范的制作作者:OMG 链接:D:\SALIM\Docs\Specifications\XMI1XSD.pdf 年份:2002 标题:EDOC 作者: OMG 网络链接 : D:\SALIM\Docs\Specifications\EDOC02-02-05.pdf

论文

年份:2001 年 10 月 标题:Echanges de Spec�cifications H�t�rog�nes et R�parties 作者:Xavier Blanc 网站链接:D:\SALIM\Docs\Theses\TheseXavier.pdf 年份:2001 年 1 月标题:对象的组成-面向软件设计模型作者:Siobhan Clarke 链接:D:\SALIM\Docs\Theses\SClarkeThesis.pdf 年份:2002 年 6 月标题:贡献 - la repr�sentation de processu par des technologies de m�ta mod�lisation 作者:Erwan Breton网站链接:D:\SALIM\Docs\Thes\ErwanBretonThesis.pdf 年份:2000 年 10 月 标题:技术改造和改造技术作者:Richard Lemesle 网站链接:D:\SALIM\Docs\Thes\RichardLemesle。 pdf 年份:Juillet 2002 标题:Utilsation d'agents mobiles pour la construction des services 发行作者:Siegfried Rouvrais 网站链接:D:\SALIM\Docs\Thes\theserouvrais.pdf ... ...

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

4

2 回答 2

4

我调用dispContent(doc.getFirstChild());where doc 是具有给定 xml 文件内容的文档。

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

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

规格

年份:2000 年 3 月

标题:MOF 1.3

作者:天啊

网址:D:\SALIM\Docs\Specifications\MOF1_3.pdf

年份:2002 年 8 月

标题:IDLto Java 语言映射规范

作者:天啊

网络链接:D:\SALIM\Docs\Specifications\IDL2Java.pdf

年份:1999

标题:XML 元数据交换 (XMI) 版本 1.1

作者:天啊

网址:D:\SALIM\Docs\Specifications\xmi-1.1.pdf

年份 : 2002

标题:XML 元数据交换 (XMI) 版本 2

作者:“天啊

网页链接:D:\SALIM\Docs\Specifications\XMI2.pdf

年份 : 2002

title : XMI Version 1 XML Schema Specification的产生

作者:天啊

网址:D:\SALIM\Docs\Specifications\XMI1XSD.pdf

年份 : 2002

标题: EDOC

作者:天啊

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

论文

年份:2001 年 10 月

标题 : Echanges de Specifications Hétérogènes et Réparties

作者:泽维尔布兰克

网络链接:D:\SALIM\Docs\Thes\TheseXavier.pdf

年份 : 一月 2001

标题:面向对象软件设计模型的组成

作者:西沃恩·克拉克

网页链接:D:\SALIM\Docs\Thes\SClarkeThesis.pdf

如果您在"\n"创建新行时遇到问题,可以尝试使用系统使用的内容:

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();
}

结果:

规格

年份:2000 年 3 月
标题:MOF 1.3
作者:天啊
网址:D:\SALIM\Docs\Specifications\MOF1_3.pdf

年份:2002 年 8 月
标题:IDLto Java 语言映射规范
作者:天啊
网络链接:D:\SALIM\Docs\Specifications\IDL2Java.pdf

年份:1999
标题:XML 元数据交换 (XMI) 版本 1.1
作者:天啊
网址:D:\SALIM\Docs\Specifications\xmi-1.1.pdf

年份 : 2002
标题:XML 元数据交换 (XMI) 版本 2
作者:“天啊
网页链接:D:\SALIM\Docs\Specifications\XMI2.pdf

年份 : 2002
title : XMI Version 1 XML Schema Specification的产生
作者:天啊
网址:D:\SALIM\Docs\Specifications\XMI1XSD.pdf

年份 : 2002
标题: EDOC
作者:天啊
网址:D:\SALIM\Docs\Specifications\EDOC02-02-05.pdf

论文

年份:2001 年 10 月
标题 : Echanges de Specifications Hétérogènes et Réparties
作者:泽维尔布兰克
网络链接:D:\SALIM\Docs\Thes\TheseXavier.pdf

年份 : 一月 2001
标题:面向对象软件设计模型的组成
作者:西沃恩·克拉克
网页链接:D:\SALIM\Docs\Thes\SClarkeThesis.pdf

于 2012-11-29T01:50:42.587 回答
1

当然,现在我看到您已经用 html 标记了您的问题,并且到目前为止您的代码与 html 无关。所以我假设 out.println 是 Servlet 的一些 OutputStream 并且您正在尝试输出 html。

所以 println 换行符和 "\n" 换行符仅在 html 源代码中可用。浏览器会跳过这个。

更改此行

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

out.println(temp.getNodeName() + " : " + temp.getTextContent() + "< br />");

并且 servlet 应该与换行符一起输出。

于 2012-11-29T08:00:58.883 回答