首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析XML字幕并转换为.srt纯文本

解析XML字幕并转换为.srt纯文本
EN

Stack Overflow用户
提问于 2018-02-16 15:03:09
回答 1查看 341关注 0票数 0

我有一个XML文档如下:

代码语言:javascript
复制
<document id="5509769">
  <s id="1">
    <time id="T1S" value="00:00:07,910" />
    <w alternative="Ciske" id="1.1">CISKE</w>
    <w id="1.2">Die</w>
    <w alternative="rot" id="1.3">ROT</w>
    <time id="T1E" value="00:00:10,910" />
  </s>
  <s id="2">
    <time id="T2S" value="00:00:12,320" />
    <w id="2.1">Almal</w>
    <w id="2.2">kan</w>
    <w id="2.3">maar</w>
    <w id="2.4">die</w>
    <w id="2.5">Cholera</w>
    <w id="2.6">kry</w>
    <w id="2.7">,</w>
    <time id="T2E" value="00:00:15,690" />
    <time id="T3S" value="00:00:15,750" />
    <w id="2.8">en</w>
    <w id="2.9">vir</w>
    <w id="2.10">my</w>
    <w id="2.11">part</w>
    <w id="2.12">kan</w>
    <w id="2.13">almal</w>
    <w id="2.14">doodgaan</w>
    <w id="2.15">.</w>
    <time id="T3E" value="00:00:18,890" />
  </s>
  <s id="3">
    <time id="T4S" value="00:00:18,960" />
    <w id="3.1">Ek</w>
    <w id="3.2">het</w>
    <w id="3.3">nie</w>
    <w id="3.4">lus</w>
    <w id="3.5">om</w>
    <w id="3.6">te</w>
    <w id="3.7">leer</w>
    <w id="3.8">nie</w>
    <w id="3.9">.</w>
    <time id="T4E" value="00:00:22,490" />
   </s>
</document>

我希望使用Linq将其转换为.srt纯文本文件。

例如,这个XML节点的输出应该是:

代码语言:javascript
复制
1
00:00:07,910 --> 00:00:10,910
CISKE Die ROT

2
00:00:12,320 --> 00:00:18,890
Almal kan maar die Cholera kry, en vir my part kan almal doodgaan.

3
00:00:18,960 --> 00:00:22,490
Ek het nie lus om te leer nie.

我试过这样做:

代码语言:javascript
复制
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(XML);
using (var nodeReader = new XmlNodeReader(xmldoc))
{
   nodeReader.MoveToContent();
   XDocument xdoc = XDocument.Load(nodeReader);            
   List<dynamic> elements =
   (
      from item in xdoc.Descendants("s")
      select new
      {
         Begin = (item.FirstNode as XElement).LastAttribute.Value,
         Last = (item.LastNode as XElement).LastAttribute.Value
      }
   ).ToList<dynamic>();
}

但我无法检索所有w节点值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-16 17:29:39

您可以通过从父项目获取所有w子代来获取w元素的所有值。

如下面的代码所示,NodeValuesInArray作为一个值数组返回,您可以在以后进行迭代。

此外,我还提供了一个(NodeValuesCommaSeparated)值的空格分隔版本,如果更合适的话,它可以直接用于显示。

代码语言:javascript
复制
using (var nodeReader = new XmlNodeReader(xmldoc))
{
    nodeReader.MoveToContent();
    XDocument xdoc = XDocument.Load(nodeReader);
    List<dynamic> elements =
    (
        from item in xdoc.Descendants("s")
        select new
        {
            Begin = (item.FirstNode as XElement).LastAttribute.Value,
            Last = (item.LastNode as XElement).LastAttribute.Value,
            NodeValuesInArray = item.Descendants("w").Select(q => q.Value).ToArray(),
            NodeValuesCommaSeparated = string.Join(" ", item.Descendants("w").Select(q => q.Value).ToArray())
        }
    ).ToList<dynamic>();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48829491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档