我工作的Web應用程序可以採用時間文本標記(TTML)或WebVTT格式獲取字幕文件。如果文件是定時文本,我想將它翻譯成WebVTT。這大多不是問題,我遇到的一個問題是,如果TTML將HTML作爲文本內容的一部分,那麼HTML標記將被丟棄。解析用於將時間文本標記轉換爲WebVTT的XML
例如:
<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();
}
對我失去了我,或者有什麼想法有剛這樣做的更好方式,或者即使已經有將時間文本轉換爲WebVTT的解決方案,也是值得讚賞的。謝謝。
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
謝謝,甚至沒有想到這一點。 – HJ05