2011-09-21 18 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。然而,我已經嘗試了這一點,這也是最接近我想要做的解決方案。不幸的是解析出來的文本包含所有的標籤',

,

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