2017-01-22 219 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"); 

和爱(你崇拜谁),使用有意义的,正确的,套管变量名....