2011-09-21 43 views
0

我有一个关于用xpath从多个xml文件读出节点内容的问题。我完全意识到,在这个问题上互联网上有大量资源,请相信我真的让我发疯。我想从路透社rcv1实验语料库的文件中读出信息。这个语料库中的所有文件共享相同的信息。我以这里的结构作为示例:用xpath从几个xml文件读出节点内容

<?xml version="1.0" encoding="iso-8859-1" ?> 
<newsitem itemid="1000000" id="root" date="xxx" xml:lang="en"> 
<title>title title title</title> 
<headline>headline headline headline</headline> 
<byline>Jack Daniels</byline> 
<dateline>Blabla</dateline> 
<text> 
<p> Paragraph 1 Paragraph 1 Paragraph 1 Paragraph 1 Paragraph 1 </p> 
<p> Paragraph 2 Paragraph 2 Paragraph 2 Paragraph 2 Paragraph 2 </p> 
<p> Paragraph 3 Paragraph 3 Paragraph 3 Paragraph 3 Paragraph 3 </p> 
<p> Paragraph 4 Paragraph 4 Paragraph 4 Paragraph 4 Paragraph 4 </p> 
</text> 
<copyright>(c) Reuters Limited 1996</copyright> 
<metadata> 
<codes class="bip:countries:1.0"> 
    <code code="MEX"> 
    <editdetail attribution="Reuters BIP Coding Group" action="confirmed" date="1996-02-20"/> 
    </code> 
</codes> 
<codes class="bip:topics:1.0"> 
    <code code="xxx"> 
    <editdetail attribution="Reuters BIP Coding Group" action="confirmed" date="1996-08-20"/> 
    </code> 
    <code code="xxx"> 
    <editdetail attribution="Reuters BIP Coding Group" action="confirmed" date="xxx"/> 
    </code> 
    <code code="xxx"> 
    <editdetail attribution="Reuters BIP Coding Group" action="confirmed" date="xxx"/> 
    </code> 
    <code code="xxx"> 
    <editdetail attribution="Reuters BIP Coding Group" action="confirmed" date="xxx"/> 
    </code> 
    <code code="xxx"> 
    <editdetail attribution="Reuters BIP Coding Group" action="confirmed" date="xxx"/> 
    </code> 
</codes> 
<dc element="dc.publisher" value="Reuters Holdings Plc"/> 
<dc element="dc.date.published" value="xxx"/> 
<dc element="dc.source" value="Reuters"/> 
<dc element="dc.creator.location" value="xxx"/> 
<dc element="dc.creator.location.country.name" value="xxx"/> 
<dc element="dc.source" value="Reuters"/> 
</metadata> 
</newsitem> 

我的任务的最终目标是将这几千个文件转换为csv。我正在用软件rapidminer通过der xpath地址解决不同的节点内容。这对于所有点而言都是完全没有问题的,但是其中的内容。与/ newsitem/text/p/node()他总是只提供第一段。然而我要找的是从所有段落中提取所有纯文本。这意味着CSV文件应该看起来大约像:

标题,标题,日期,文本,位置 titleblabla,headlineblabla,XXX,第1款第2款第3款,在任何地方 othertitleblabla,otherheadlineblabla,otherdatexxx,其他款1款2段落3,无处可去

请问有人会这么好,如何通过xpath来实现这个目标。我也尝试了与字符串匹配的整个事情,但这需要年龄,另外我必须摆脱xml标签。

坦克你非常多,

亚历山大由给定的XPath表达式选择(绝望的XPath/XML新手)

回答

0

它从你的描述是RapidMiner检索节点(-set)的字符串值似乎。根据定义,节点集的字符串值是此节点集中第一个节点的字符串值 - 这与您对问题的描述完全匹配。

代替:

//newsitem/text/p/node() 

使用:

/newsitem/text 

与上面的表达式所提供的文档中elementselected唯一的字符串值(根据定义)是所有文本节点后代的连接 - 正是你想要的。

+0

非常感谢你的回答dimitre。然而,我已经尝试了这一点,这也是最接近我想要做的解决方案。不幸的是解析出来的文本包含所有的标签',

,

'等等。是不是有一种方法直接处理段落的字符串? –