对于C#中的代码,我使用XPathDocument
将字符串解析为XML。C#XPathDocument将字符串解析为包含BOM的XML
该字符串是从SDL Trados Studio中检索的,它取决于正在处理的XML(它最初是如何创建和加载以进行翻译的),但有时该字符串有时不是BOM。
编辑:'xml'实际上是从源文本和目标文本以及结构元素的片段中分析出来的。文本元素转义为xml,标记和文本加入一个string
。因此,如果标记在xliff
中有BOM,那么该字符串将具有BOM。
我想实际解析任何xmls,独立于编码。所以此时我的解决方案是用Substring
删除BOM。
这里是我的代码:
//Recreate XML files (extractor returns two string arrays)
string strSourceXML = String.Join("", extractor.TextSrc);
string strTargetXML = String.Join("", extractor.TextTgt);
//strip BOM
strSourceXML = strSourceXML.Substring(strSourceXML.IndexOf("<?"));
strTargetXML = strTargetXML.Substring(strSourceXML.IndexOf("<?"));
//Transform XML with the preview XSL
var xSourceDoc = new XPathDocument(strSourceXML);
var xTargetDoc = new XPathDocument(strTargetXML);
...我已经寻找一个更好的解决方案,通过几篇文章,如这些,但是我发现没有更好的解决办法尚未:
任何意见,更优雅的解决这个问题?
也许硫帮助:http://stackoverflow.com/questions/3104158/xmlreader-breaks-on-utf-8-bom –
用记事本打开文件。启动记事本,然后使用菜单文件:打开浏览文件。当您单击文件名时,请检查NotePad浏览器中文件的编码。如果编码不是UTF8,请打开文件,然后使用UTF8保存。 – jdweng
@jdweng你的意思是我应该通过记事本自动化我的字符串?看起来并不简单... – ib11