2017-01-22 225 views
0

我正在嘗試編寫一個軟件,它將有一個視頻播放器,轉錄本並同步運行它們。無法從XML文件中提取時間數據

我現在對轉錄本有問題。我重視我使用的XML文件:

NodeList nodeParagraphs = root.getElementsByTagName("u"); 
NodeList nodeParagraphs2 = root.getElementsByTagName("internal-media"); 
    for(int i=0; i < nodeParagraphs.getLength(); i++){ 
    Element nodeParagraph = (Element)nodeParagraphs.item(i); 
    Element nodeParagraph2 = (Element)nodeParagraphs2.item(i); 
    String id = nodeParagraph.getAttribute("uID"); 
    String who = nodeParagraph.getAttribute("who"); 
    String Time = nodeParagraph2.getAttribute("start"); 
    Paragraph p = new Paragraph(who, id, Time); 

    NodeList wNodeList = nodeParagraph.getElementsByTagName("w"); 
    for(int j=0; j < wNodeList.getLength(); j++){ 
     Element wElem = (Element)wNodeList.item(j); 
     String word = wElem.getTextContent(); 
     p.addWord(word); 
    } 
    chat.addParagraph(p); 
    } 

的問題是,當我顯示的成績單,他們是在錯誤的時間,因爲在每一個u節多個內部媒體標籤打印。當我只需要每個段落的第一個時,它將全部採用。示例如下所示:

<?xml version="1.0" encoding="UTF-8"?> 

<CHAT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://www.talkbank.org/ns/talkbank" 
     xsi:schemaLocation="http://www.talkbank.org/ns/talkbank http://talkbank.org/software/talkbank.xsd" 
     Media="future" Mediatypes="video" 
     PID="11312/t-00017262-1" 
     Font="CAfont:13:0" 
     Version="2.2.1" 
     Lang="eng" 
     Options="CA" 
     Corpus="DaCapo" 
     Date="1984-01-01"> 
    <Participants> 
    <participant 
     id="DAC" 
    name="Dacapo_Leader" 
     role="Adult" 
     language="eng" 

    /> 
    <participant 
     id="MIC" 
    name="Michael" 
     role="Adult" 
     language="eng" 

    /> 
    <participant 
     id="LUI" 
    name="Luis" 
     role="Adult" 
     language="eng" 

    /> 
    <participant 
     id="NIN" 
    name="Nina" 
     role="Adult" 
     language="eng" 

    /> 
    <participant 
     id="KEN" 
     role="Adult" 
     language="eng" 

    /> 
    <participant 
     id="JAK" 
    name="Jakob" 
     role="Adult" 
     language="eng" 

    /> 
    <participant 
     id="XXX" 
     role="Unidentified" 
     language="eng" 

    /> 
    <participant 
     id="WOM" 
    name="Dacapo_Woman" 
     role="Adult" 
     language="eng" 

    /> 
    </Participants> 
    <u who="KEN" uID="u0"> 
    <w>as</w> 
    <w>it</w> 
    <w>currently</w> 
    <w>stands</w> 
    <w>one</w> 
    <w>of</w> 
    <w>the</w> 
    <w>things</w> 
    <w>that</w> 
    <w>people</w> 
    <w>do</w> 
    <internal-media 
     start="0.000" 
     end="2.520" 
     unit="s" 
    /> 
    <w>is</w> 
    <w>create</w> 
    <internal-media 
     start="2.520" 
     end="3.240" 
     unit="s" 
    /> 
    <w>one</w> 
    <w>of</w> 
    <w>the</w> 
    <w>things</w> 
    <w>that</w> 
    <w>anthropologists</w> 
    <w>design</w> 
    <w>researchers</w> 
    <w>do</w> 
    <internal-media 
     start="3.240" 
     end="6.720" 
     unit="s" 
    /> 
    <w>is</w> 
    <w>they</w> 
    <w>create</w> 
    <w>distance</w> 
    <w>between</w> 
    <w>business</w> 
    <w>people</w> 
    <internal-media 
     start="6.720" 
     end="9.160" 
     unit="s" 
    /> 
    <w>and</w> 
    <w>uh</w> 
    <t type="missing CA terminator"></t> 
    <media 
     start="9.160" 
     end="11.200" 
     unit="s" 
    /> 
    </u> 
    <u who="DAC" uID="u1"> 
    <w>participants</w> 
    <t type="missing CA terminator"></t> 
    <media 
     start="11.200" 
     end="11.800" 
     unit="s" 
    /> 
    </u> 
+0

你能發佈XML文件(或樣本)? –

+0

@James_D對不起,我忘了添加它,我找不到如何上傳文件,所以我不得不將其添加爲Html snipit XD –

+0

只需將其粘貼並[格式化爲代碼](http:// meta。 stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) –

回答

0

您的邏輯錯誤。首先,您將整個文檔中的所有<internal-media>元素收集到一個列表中。其次,使用在另一個不同大小的列表上使用的相同索引變量遍歷該列表。

您需要爲每個當前<u>元素的後代元素構建「internal-media」列表。在此之後,只取前(0索引)項目從列表中

NodeList nodeParagraphs = root.getElementsByTagName("u"); 
    for(int i=0; i < nodeParagraphs.getLength(); i++){ 
    Element nodeParagraph = (Element)nodeParagraphs.item(i); 
    NodeList internalMediaList = nodeParagraph.getElementsByTagName("internal-media"); 
    Element firstInternalMedia = (Element)internalMediaList.item(0); 
    String time = firstInternalMedia.getAttribute("start"); 

和愛(你崇拜誰),使用有意義的,正確的,套管變量名....