我在使用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”显示一个内容(年,标题,作者和Web链接标记)。

这是当我浏览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 Schema Specification作者:OMG网络链接:D:\ SALIM \ Docs \ Specifications \ XMI1XSD.pdf年:2002标题:EDOC作者:OMG网站链接:D:\ SALIM \ Docs \ Specifications \ EDOC02-02-05.pdf
  
  论文
  
  年:Octobre 2001标题:E.changes de Sp?cifications H?t?rog?nes et R.parties作者:Xavier Blanc网站链接:D:\ SALIM \ Docs \ Theses \ TheseXavier.pdf年:Janvier 2001标题:Object-的组成面向软件设计模型作者:Siobhan Clarke网站链接:D:\ SALIM \ Docs \ Theses \ SClarkeThesis.pdf年:2002年6月标题:贡献-过程建模技术代表作者:Erwan Breton网络链接:D:\ SALIM \ Docs \ Theses \ ErwanBretonThesis.pdf年:2000年10月标题:修改技术和M.ta修改作者:理查德·莱梅斯(Richard Lemesle)网站链接:D:\ SALIM \ Docs \ Theses \ RichardLemesle。 pdf年:Juillet 2002标题:服务使用的移动代理分发者作者:Siegfried Rouvrais网站链接:D:\ SALIM \ Docs \ Theses \ theserouvrais.pdf
  ...
  ...


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

最佳答案

我叫dispContent(doc.getFirstChild());,其中doc是具有给定xml文件内容的Document。

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


结果:

技术指标

年:2000年3月
标题:MOF 1.3
作者:OMG
网络链接:D:\ SALIM \ Docs \ Specifications \ MOF1_3.pdf

年:2002年8月
标题:IDLto Java语言映射规范
作者: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 Schema规范的生产
作者:OMG
网络链接:D:\ SALIM \ Docs \ Specifications \ XMI1XSD.pdf

年:2002
标题:EDOC
作者:OMG
网络链接:D:\ SALIM \ Docs \ Specifications \ EDOC02-02-05.pdf

论文

年:2001年10月
标题:HétérogènesetRéparties的Echanges deSpécifications
作者:Xavier Blanc
网络链接:D:\ SALIM \ Docs \ Theses \ TheseXavier.pdf

年:Janvier 2001
标题:面向对象的软件设计模型的组成
作者:Siobhan Clarke
网络链接:D:\ SALIM \ Docs \ Theses \ SClarkeThesis.pdf

07-24 16:26