【问题标题】:Remove xml node from ttml file C#从 ttml 文件 C# 中删除 xml 节点
【发布时间】:2018-03-17 06:16:40
【问题描述】:

由于我无法找到上一个问题的答案: Xmlstarlet ed encoding and powershell inside Process C# 我想尝试另一条路。

我只需要能够从 ttml 文件中删除节点(这是一种用于字幕的 xml)。 使用 xmlstarlet 我可以这样做:

./xml.exe ed -N ns=http://www.w3.org/2006/04/ttaf1 -d '//ns:div[not(contains(@xml:lang,''Italian''))]' "C:\Users\1H144708H\Downloads\a.mul.ttml"

但我无法在不丢失 Windows Powershell 上的 utf-8 编码的情况下做到这一点(我能够在 linux bash 上做到这一点)。

如果我想在 C# 上做同样的事情,我该怎么做?我当然知道如何打开/读取/写入文本文件,但我不知道是否有办法创建具有特定命名空间的 xml,以及如何删除每个不包含 xml:lang languageToKeep 的节点。

编辑。 像这样的:

XmlDocument xml = new XmlDocument();
xml.Load(files[0]);
XmlNodeList nodes = xml.SelectNodes("//ns:div[not(contains(@xml:lang,''Italian''))]");
Console.WriteLine(nodes.ToString());

但我认为我需要命名空间......但我不知道如何。

【问题讨论】:

    标签: c# xml powershell ttml


    【解决方案1】:

    最后,我只是使用 StreamReader 逐行读取文件。通过一个简单的 Contains 我决定 xml:lang="Language" 在哪里,然后我开始将每一行添加到一个字符串中。当然,我在 while 循环之前添加了文件的开头和结尾,当我读取包含的行时,我停止添加每一行。我知道这不是做事的最佳方式,但它适用于我的情况。

    【讨论】:

      猜你喜欢
      • 2013-02-19
      • 2023-03-24
      • 1970-01-01
      • 2016-11-05
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多