2012-05-20 52 views
6

私はメキシコ税計算プログラムで働いており、政府はXSDファイルhttp://www.sat.gob.mx/cfd/3/cfdv32.xsdをxsd.exeとともに提供しました。私はそれをC#クラスに変換しました。コードでこの投稿を膨らませないために、リンクを提供するだけです:http://pastebin.com/r3VCgFMUXMLシリアル化に接頭辞と名前空間を追加する

<?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> 
:私は、この出力を与える

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をシリアル化しようとしました

我々は政府によって提供された例で見ることができるように(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

+0

あなたは何も変更する必要はありません。二つの文書が同一である。http://stackoverflow.com/tags/xml-namespaces/infoがすべてであなたを助けますかどうかを確認してくださいそれが助けにならないならば、そう言ってください。 –

答えて

7

問題は、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"; 
... 
} 
関連する問題