Я работаю над веб-приложением, которое может принимать файлы субтитров в формате Time Text Markup (TTML) или WebVTT. Если файл имеет временный текст, я хочу перевести его на WebVTT. Это в основном не проблема, одна проблема, с которой я столкнулся, заключается в том, что если TTML имеет HTML как часть текстового содержимого, то теги HTML будут удалены.Анализ XML для преобразования временной разметки текста в WebVTT
Например:
<p begin="00:00:08.18" dur="00:00:03.86">(Music<br />playing)</p>
приводит:
(Musicplaying)
код, который я использую:
private const string TIME_FORMAT = "hh\\:mm\\:ss\\.fff";
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(fileLocation);
XDocument xdoc = xmldoc.ToXDocument();
var ns = (from x in xdoc.Root.DescendantsAndSelf()
select x.Name.Namespace).First();
List<TTMLElement> elements =
(
from item in xdoc.Descendants(ns + "body").Descendants(ns + "div").Descendants(ns + "p")
select new TTMLElement
{
text = item.Value,
startTime = TimeSpan.Parse(item.Attribute("begin").Value),
duration = TimeSpan.Parse(item.Attribute("dur").Value),
}
).ToList<TTMLElement>();
StringBuilder sb = new StringBuilder();
sb.AppendLine("WEBVTT");
sb.AppendLine();
for (int i = 0; i < elements.Count; i++)
{
sb.AppendLine(i.ToString());
sb.AppendLine(elements[i].startTime.ToString(TIME_FORMAT) + " --> " + elements[i].startTime.Add(elements[i].duration).ToString(TIME_FORMAT));
sb.AppendLine(elements[i].text);
sb.AppendLine();
}
Любые мысли о том, что я отсутствует или если есть только лучший способ сделать это или даже если уже есть решение для преобразования Time Text в WebVTT, будет оценено по достоинству. Благодарю.
Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Спасибо, даже не подумал об этом. – HJ05