【问题标题】:C# XPathDocument parsing string to XML with BOMC# XPathDocument 使用 BOM 将字符串解析为 XML
【发布时间】: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 只删除确切的字符,而不是希望你找到&lt;?
  • 同意@CharlesMager 尝试修剪 BOM。在我作为本地化工程师的日常工作中,我只看到三个 BOM:ef bb bfff fefe ff。除非您有证据表明您需要其他变体,否则我会坚持使用这三个。

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


【解决方案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);
}

【讨论】:

  • 是的,但这就是我的字符串有 BOM 的问题。所以我正在寻找剥离它的方法。实际上是现有的识别BOM的方法,所以我不必去使用Substring的野蛮方式。
猜你喜欢
  • 2019-02-02
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多