当来自字符串时,SqlXml 删除 XML header
SqlXml removes XML header when comes from string
我正在使用 C# 和 MVC4 开发 Web 应用程序。目前我正在将 字符串变量转换为 SqlXml 文件。我有一个具有以下结构的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" version="3.2" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</cfdi:Comprobante>
我正在将上述文件成功转换为字符串,然后使用以下代码将字符串转换为 SqlXML.
cfdiDocumento.CFDIXML = Serializar.XMLToSqlXml(comprobante);
其中 cfdiDocumento.CFDIXML 是一个 SqlXml var, Serializar.XMLToSqlXml(comprobante)方法接收一个字符串,执行下面的代码:
public static SqlXml XMLToSqlXml(string xmlString)
{
SqlXml sqlXmlFiltro = null;
if (xmlString != null)
{
StringReader sr = new StringReader(xmlString);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Auto;
XmlReader reader0 = XmlReader.Create(sr, settings);
sqlXmlFiltro = new SqlXml(reader0);
}
return sqlXmlFiltro;
}
代码成功完成后,文件正确但正在删除 xml header
<?xml version="1.0" encoding="utf-8"?>
问题是:如何在转换为 SqlXml var 时保留 xml header?
如果您无法更改 SqlXml 属性的类型,您可以尝试将 SqlXml 转换为 xml 文档以附加 xml 声明并获取外部 xml:
public string SqlXmlToString(SqlXml sqlXml)
{
XmlDocument doc = new XmlDocument();
doc.Load(sqlXml.CreateReader());
// Create XML declaration with your encoding.
XmlDeclaration xmldecl;
xmldecl = doc.CreateXmlDeclaration("1.0", null, null);
xmldecl.Encoding = "UTF-8";
// Add to the document the created declaration
XmlElement root = doc.DocumentElement;
doc.InsertBefore(xmldecl, root);
return doc.OuterXml;
}
希望对您有所帮助
我正在使用 C# 和 MVC4 开发 Web 应用程序。目前我正在将 字符串变量转换为 SqlXml 文件。我有一个具有以下结构的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" version="3.2" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</cfdi:Comprobante>
我正在将上述文件成功转换为字符串,然后使用以下代码将字符串转换为 SqlXML.
cfdiDocumento.CFDIXML = Serializar.XMLToSqlXml(comprobante);
其中 cfdiDocumento.CFDIXML 是一个 SqlXml var, Serializar.XMLToSqlXml(comprobante)方法接收一个字符串,执行下面的代码:
public static SqlXml XMLToSqlXml(string xmlString)
{
SqlXml sqlXmlFiltro = null;
if (xmlString != null)
{
StringReader sr = new StringReader(xmlString);
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Auto;
XmlReader reader0 = XmlReader.Create(sr, settings);
sqlXmlFiltro = new SqlXml(reader0);
}
return sqlXmlFiltro;
}
代码成功完成后,文件正确但正在删除 xml header
<?xml version="1.0" encoding="utf-8"?>
问题是:如何在转换为 SqlXml var 时保留 xml header?
如果您无法更改 SqlXml 属性的类型,您可以尝试将 SqlXml 转换为 xml 文档以附加 xml 声明并获取外部 xml:
public string SqlXmlToString(SqlXml sqlXml)
{
XmlDocument doc = new XmlDocument();
doc.Load(sqlXml.CreateReader());
// Create XML declaration with your encoding.
XmlDeclaration xmldecl;
xmldecl = doc.CreateXmlDeclaration("1.0", null, null);
xmldecl.Encoding = "UTF-8";
// Add to the document the created declaration
XmlElement root = doc.DocumentElement;
doc.InsertBefore(xmldecl, root);
return doc.OuterXml;
}
希望对您有所帮助