从几个xml文件中读取带有xpath的节点内容

时间:2011-09-21 17:29:38

标签: xml xpath

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

<?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标签。

非常坦克,

alexandre(一个绝望的xpath / xml新手)

1 个答案:

答案 0 :(得分:0)

从您的描述中可以看出,RapidMiner检索由给定XPath表达式选择的节点(-set)的字符串值。根据定义,节点集的字符串值是此节点集中第一个节点的字符串值 - 这与您对问题的描述完全匹配。

<强>解决方案

而不是:

//newsitem/text/p/node() 

使用:

/newsitem/text

在提供的文档中选择的唯一元素的字符串值与上面的表达式(按照定义)是所有文本节点后代的串联 - 正是你想要的。