2017-10-05 138 views
0

因爲我無法找到我以前的問題的答案: Xmlstarlet ed encoding and powershell inside Process C# 我想嘗試其他路徑。從ttml文件刪除xml節點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()); 

但是我認爲我需要的命名空間......我不知道怎麼辦。

回答

0

最後我只是使用StreamReader來ReadLine通過行文件。用一個簡單的包含我決定xml:lang =「語言」在哪裏,然後我開始將每一行添加到一個字符串。當然,我在while循環之前將頭部和尾部添加到我的文件中,並且當我讀取包含的一行時,我停止添加每一行。我知道這不是做事情的最佳方式,但它適用於我的情況。