6

私はメキシコの税計算プログラムで働いており、政府は次のXSDファイルhttp://www.sat.gob.mx/cfd/3/cfdv32.xsdを提供し、xsd.exeを使用してC#に変換しました。クラスはかなり大きいので、この投稿をコードで肥大化させないために、そのクラスへのリンクを提供します:http: //pastebin.com/r3VCgFMU

いくつかのクラスフィールドに入力した後(例が大きくなりすぎないように)、次のようにXMLをシリアル化しようとしました。

XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlNameSpace.Add("schemaLocation", "http://www.sat.gob.mx/cfd/3/cfdv32.xsd");
xmlNameSpace.Add("cfdi", "www.sat.gob.mx/cfd/3");
XmlTextWriter xmlTextWriter = new XmlTextWriter("c:\\temp\\pruebas.xml", Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;
XmlSerializer xs = new XmlSerializer(typeof(Comprobante));

xs.Serialize(xmlTextWriter, comprobante, xmlNameSpace);
xmlTextWriter.Close();

これは私にこの出力を与えます:

<?xml version="1.0" encoding="utf-8"?>
<Comprobante xmlns:cfdi="www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:schemaLocation="http://www.sat.gob.mx/cfd/3/cfdv32.xsd" version="3.2" fecha="0001-01-01T00:00:00" subTotal="0" total="0" tipoDeComprobante="ingreso" xmlns="http://www.sat.gob.mx/cfd/3">
  <Emisor rfc="DERH9145202V4">
    <DomicilioFiscal calle="Calle1" colonia="Colonia" municipio="municipio" estado="estado" pais="pais" codigoPostal="07000" />
    <RegimenFiscal Regimen="Peque" />
  </Emisor>
</Comprobante>

政府(ftp://ftp2.sat.gob.mx/asistencia_servicio_ftp/publicaciones/solcedi/ejemplo1%20cfdv3.xml)によって提供された例でわかるように、生成されたファイルにはいくつかのポイントがありません。

<Comprobante... should be <cfdi:Comprobante 
<Emisor.. should be <cfdi:Emisor 
and so on and so forth with all elements...
xmlns:schemaLocation should be xsi:schemaLocation  
I'm getting and additional xmlns="http://www.sat.gob.mx/cfd/3" at the end of the Comprobante declaration

xmlでこの変更をどのように実現できますか?:D

4

1 に答える 1

8

問題はMSDNスタッフによって解決されました。同じ問題が発生した場合は、次を追加してください。

[XmlAttribute(Namespace = XmlSchema.InstanceNamespace)]
public string schemaLocation = "http://www.sat.gob.mx/cfd/3 cfdv32.xsd";

xsd.exeによって生成されたルートクラスまたは部分クラスのいずれかに

(この例では

public partial class Comprobante {

        [XmlAttribute(Namespace = System.Xml.Schema.XmlSchema.InstanceNamespace)]
        public string schemaLocation = "http://www.sat.gob.mx/cfd/3 cfdv32.xsd";
...
}
于 2012-05-20T20:06:34.847 に答える