我在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));
}
}*/
}
“domaineTemplate”函数只显示其参数! 当我在Java中浏览“bib_ref”标签时,我的问题就出现了。对于每个“bib_ref”循环,它显示所有“bib_ref”标签的所有内容......在一行中!我想每个“bib_ref”只显示一个内容(年份,标题,作者和网络链接标记)。
以下是我浏览bib_ref时显示的内容:
你能帮帮我吗? 我只是一个带java的xml初学者,我正在寻找一些解决方案大约3个小时...非常感谢!规格
年:2000年3月标题:MOF 1.3作者:OMG weblink:D:\ SALIM \ Docs \ Specifications \ MOF1_3.pdf年份:2002年8月标题:IDLto Java LanguageMapping规范作者:OMG weblink:D:\ SALIM \ Docs \规范\ IDL2Java.pdf年份:1999标题:XML元数据交换(XMI)版本1.1作者:OMG weblink:D:\ SALIM \ Docs \ Specifications \ xmi-1.1.pdf年份:2002标题:XML元数据交换(XMI)版本2作者:OMG weblink:D:\ SALIM \ Docs \ Specifications \ XMI2.pdf年份:2002标题:XMI版本1 XML Schema规范生成作者:OMG weblink:D:\ SALIM \ Docs \ Specifications \ XMI1XSD.pdf年份:2002标题:EDOC作者:OMG weblink:D:\ SALIM \ Docs \ Specifications \ EDOC02-02-05.pdf
论文
year:Octobre 2001 title:Echanges deSp cificationsH t rog nesetR parties作者:Xavier Blanc网站链接:D:\ SALIM \ Docs \ Theses \ TheseXavier.pdf年:Janvier 2001标题:作文面向对象的软件设计模型作者:Siobhan Clarke weblink:D:\ SALIM \ Docs \ Theses \ SClarkeThesis.pdf年:Juin 2002标题:贡献 larepr sentationde processu par des techniquesdem tamod lisationauthor :Erwan Breton网站链接:D:\ SALIM \ Docs \ Theses \ ErwanBretonThesis.pdf年:Octobre 2000标题:技术deMod lisationetdeM tamod lisation作者:Richard Lemesle网站链接:D:\ SALIM \ Docs \ Theses \ RichardLemesle.pdf年:Juillet 2002年头衔:Utilsation d'agents mobiles pour la construction des servicesdistribu s作者:Siegfried Rouvrais weblink:D:\ SALIM \ Docs \ Theses \ theserouvrais.pdf ... ...
答案 0 :(得分:4)
我调用了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
如果您在"\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();
}
结果:
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
答案 1 :(得分:1)
当然,现在我看到你用html标记了你的问题,你的代码到目前为止与html无关。所以我认为out.println是Servlet的一些OutputStream,你正在尝试输出html。
因此,println换行符和“\ n”换行符仅在html源代码中可用。浏览器将跳过此内容。
更改此行
out.println(temp.getNodeName()+“:”+ temp.getTextContent()+ “\ n”);
到
out.println(temp.getNodeName()+“:”+ temp.getTextContent()+“&lt; br /&gt;“中);
并且servlet应该与换行符一起正常输出。