0

由于我无法找到上一个问题的答案: 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());

但我认为我需要命名空间......我不知道怎么做。

4

1 回答 1

0

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

于 2017-10-11T13:18:26.073 回答