【发布时间】:2016-05-14 05:32:02
【问题描述】:
对于 C# 中的代码,我使用 XPathDocument 将字符串解析为 XML。
字符串是从 SDL Trados Studio 检索的,它取决于正在处理的 XML(它最初是如何创建和加载以进行翻译的)字符串有时有 BOM,有时没有。
编辑:“xml”实际上是从源文本和目标文本的段以及结构元素中解析出来的。文本元素被转义为 xml,标记和文本合并为一个 string。因此,如果标记在 xliff 中有 BOM,则字符串将具有 BOM。
我正在尝试实际解析任何 xml,与编码无关。所以此时我的解决方案是使用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);
我已经通过几篇文章寻找更好的解决方案,例如这些,但我还没有找到更好的解决方案:
有什么建议可以更优雅地解决这个问题吗?
【问题讨论】:
-
也许 thia 有帮助:stackoverflow.com/questions/3104158/…
-
用记事本打开文件。启动记事本,然后使用菜单文件浏览文件:打开。单击文件名时,请检查记事本浏览器中文件的编码。如果编码不是 UTF8,请打开文件,然后使用 UTF8 保存。
-
@jdweng 你的意思是我应该通过记事本自动化我的字符串??看起来并不简单......
-
如果它在您的源代码中被破坏,那么可能没有很多更优雅的方法来修复它。我很想使用
TrimStart只删除确切的字符,而不是希望你找到<?。 -
同意@CharlesMager 尝试修剪 BOM。在我作为本地化工程师的日常工作中,我只看到三个 BOM:
ef bb bf、ff fe和fe ff。除非您有证据表明您需要其他变体,否则我会坚持使用这三个。
标签: c# xml parsing xpath byte-order-mark