(注意:最初的问题标题是:从带有文档规范的字符串中加载 XML 的最佳方法是什么?)
我需要从 XmlDocument 对象中的 ODT opendocument (LibreOffice) 文件中获取 XML 内容。ODT 是一个 zip 存档,我设法将 content.xml 部分作为字节数组获取。转换为字符串似乎很简单,但我惊讶地发现 XmlDocument.LoadXml(string) 不接受以 Xml 文档规范行开头的字符串,例如:
<?xml version="1.0" encoding="UTF-8"?>
<Offices id="0" enabled="false">
<office />
</Offices>
例外是:Data at the root level is invalid. Line 1, position 1
我想知道是否有一个库调用来读取这样的字符串?
现在我使用我即兴创作的这个函数,但是在处理 xml 文档时必须在字符级别上做一些事情感觉不必要的复杂:
/// <summary>
/// Convert an Xml document in a string, including document specification line(s),
/// to an XmlDocument object
/// </summary>
/// <param name="XmlString"></param>
/// <returns></returns>
public static XmlDocument LoadXmlString(string XmlString)
{
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.LoadXml(XmlString.Substring(XmlString.LastIndexOf("?>") + 2));
return XmlDoc;
}
有没有更好的办法?
注意:我指的是这个较早的问题
但这解决了解析字符串的问题,将字符串转换为字节数组的解决方案,而我不应该解析字符串,也不会将字节数组转换为字符串,而只是跳过这一步直接解压 ODT 后解析字节数组。