2012-03-08 8 views
4

私は現在、請求書のUBL標準に準拠したXMLファイルを生成するサービスを開発しています。したがって、いくつかのXSDスキーマを使用する必要があります。インポートによるXSDからXMLへ

私は.NET C#で開発しており、XSDをC#クラスにマップする方法を見つけました。これはXSD.exeを使用しています。これは問題ありません。

<!-- ===== xsd:schema Element With Namespaces Declarations ===== --> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
targetNamespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" 
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" 
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" 
xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" 
xmlns:ccts="urn:un:unece:uncefact:documentation:2" 
xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" 
xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" 
elementFormDefault="qualified" 
attributeFormDefault="unqualified" 
version="2.0"> 
<!-- ===== Imports ===== --> 
<xsd:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" schemaLocation="../common/UBL-CommonAggregateComponents-2.0.xsd"/> 
<xsd:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" schemaLocation="../common/UBL-CommonBasicComponents-2.0.xsd"/> 
<xsd:import namespace="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" schemaLocation="../common/UnqualifiedDataTypeSchemaModule-2.0.xsd"/> 
<xsd:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" schemaLocation="../common/UBL-CommonExtensionComponents-2.0.xsd"/> 
<xsd:import namespace="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" schemaLocation="../common/UBL-QualifiedDatatypes-2.0.xsd"/> 
<!-- ===== Root Element ===== --> 
<xsd:element name="Invoice" type="InvoiceType"> 
... 

は、私は、XSDを走った:私は直面しています

問題は、私の生成されたクラス(:輸入XSD)のためのいくつかの問題を作るように思われるXSDファイル内の他の名前空間があること、です。次のコマンドを使用してexeファイル:私は、生成されたコードを使用してXMLファイルを作成しようとすると

xsd.exe /c C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\maindoc\UBL-Invoice-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UBL-CommonAggregateComponents-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UBL-CommonBasicComponents-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UnqualifiedDataTypeSchemaModule-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UBL-CommonExtensionComponents-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\UBL-QualifiedDatatypes-2.0.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\CodeList_UnitCode_UNECE_7_04.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\CodeList_MIMEMediaTypeCode_IANA_7_04.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\CodeList_LanguageCode_ISO_7_04.xsd C:\Users\tn\Downloads\os-UBL-2.0\os-UBL-2.0\xsd\common\CodeList_CurrencyCode_ISO_7_04.xsd 

、出力は輸入品とnamespaceprecedersが欠落している場合は、次のようになり、それが検証に失敗してしまいます。

<?xml version="1.0" encoding="utf-8"?> 
<Invoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"> 
    <UBLVersionID xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2.0</UBLVersionID> 
    <LegalMonetaryTotal xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"> 
    <LineExtensionAmount currencyID="DKK" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">200</LineExtensionAmount> 
    <PayableAmount currencyID="DKK" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">300</PayableAmount> 
    </LegalMonetaryTotal> 
</Invoice> 

そして、ここで私がXmlSerializerを

XmlSerializer mySerializer = new XmlSerializer(typeof(InvoiceType)); 
    InvoiceType invoice = new InvoiceType(); 

    UBLVersionIDType UVer = new UBLVersionIDType(); 
    UVer.Value = "2.0"; 
    invoice.UBLVersionID = UVer; 

    MonetaryTotalType mtt = new MonetaryTotalType(); 
    LineExtensionAmountType lep = new LineExtensionAmountType(); 
    lep.currencyID = CurrencyCodeContentType.DKK; 
    lep.Value = 200; 
    PayableAmountType pat = new PayableAmountType(); 
    pat.currencyID = CurrencyCodeContentType.DKK; 
    pat.Value = 300; 

    mtt.LineExtensionAmount = lep; 
    mtt.PayableAmount = pat; 

    invoice.LegalMonetaryTotal = mtt; 
    StreamWriter sw = new StreamWriter(@"C:\New folder\test2.xml"); 

    mySerializer.Serialize(sw, invoice); 
    sw.Close(); 

どのように私はこの問題を解決し、これはXMLSを行う権利(最高/最も簡単な(方法ですでき経て生成されたクラスからXMLを生成したSOMのSampleCodeこれは、.NETでXSDスキーマを次の?

答えて

2

は自分自身を見つけた。

XMLドキュメントのための名前空間とプレフィックスが含まれていXmlSerializerNamespacesオブジェクトを必要としていた。

(http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializernamespaces.aspx)

+0

どのようにCBC得るために行うんでした:表示するなど、名前空間precedersを..出力されたC#クラスをUBL XSDから変更する必要がありましたか?それとも、シリアル化するときにちょっと違うのですか? –

+0

@JamesReateguiあなたの質問に対する答えは見つかりましたか? – MichaelD

関連する問題