C#XPathDocument使用BOM

时间:2016-05-14 05:32:02

标签: c# xml parsing xpath byte-order-mark

对于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);

我已经通过几篇文章搜索了一个更好的解决方案,比如这些,但我找不到更好的解决方案:

有什么建议可以更优雅地解决这个问题吗?

1 个答案:

答案 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);
}