对于C#中的代码,我使用XPathDocument
将字符串解析为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);
我已经通过几篇文章搜索了一个更好的解决方案,比如这些,但我找不到更好的解决方案:
有什么建议可以更优雅地解决这个问题吗?
答案 0 :(得分:1)
XPathDocument
采用String
参数https://msdn.microsoft.com/en-us/library/te0h7f95%28v=vs.110%29.aspx的构造函数获取带有XML文件位置的URI。如果你有一个带有XML标记的字符串,那么在该字符串上使用StringReader
,例如
XPathDocument xSourceDoc;
using (TextReader tr = new StringReader(strSourceXML))
{
xSourceDoc = new XPathDocument(tr);
}