C# XPathDocument 使用 BOM 将字符串解析为 XML
C# XPathDocument parsing string to XML with BOM
对于 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);
我已经通过几篇文章寻找更好的解决方案,例如这些,但我还没有找到更好的解决方案:
XML - Data At Root Level is Invalid
Parsing XML with C#
Parsing complex XML with C#
XmlReader breaks on UTF-8 BOM
有什么更优雅地解决这个问题的建议吗?
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);
}
对于 C# 中的代码,我使用 XPathDocument
.
字符串是从 SDL Trados Studio 中检索的,它取决于正在处理的 XML(它最初是如何创建和加载以进行翻译的)字符串有时有 BOM 有时没有。
编辑: 'xml'实际上是从源文本和目标文本以及结构元素的片段中解析出来的。文本元素被转义为 xml,标记和文本合并为一个 string
。因此,如果标记在 xliff
中包含 BOM,则字符串将包含 BOM。
我正在尝试独立于编码实际解析任何 xml。所以此时我的解决方案是用 Substring
.
这是我的代码:
//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);
我已经通过几篇文章寻找更好的解决方案,例如这些,但我还没有找到更好的解决方案:
XML - Data At Root Level is Invalid
Parsing XML with C#
Parsing complex XML with C#
XmlReader breaks on UTF-8 BOM
有什么更优雅地解决这个问题的建议吗?
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);
}