1

アップストリームの支払い処理業者に送信する XML ファイルを生成するために PyXB を使用するライブラリがあります。簡略化されたコードは次のようになります。

import pyxb.binding.datatypes as pyxbd

from . import schema

record = schema.Record(
    Arg1='xxx',
    Arg2='xxx',
)
record.Foo = pyxbd.string('bar')
print record.toDOM()

生成された XML ドキュメントは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<Record Arg1="xxx" Arg2="xxx" 
  xmlns:ns1="http://www.w3.org/2001/XMLSchema" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
    <Foo xsi:type="ns1:string">Bar</Foo>
<Record>

理由はわかりませんが、アップストリーム プロセッサはどの要素の属性も気に入らないxsi:type="ns1:string"ため、リクエストを拒否します。ここでの私の質問は、pyxb スキーマがこのxsi:typeようなものを生成するのはなぜですか? 生成を停止できますか?

4

1 に答える 1

2

スキーマを見なければ、決定的な答えを与えることはできません。WSDL ドキュメントに埋め込まれた不適切なスキーマを回避するために、インスタンスから XML を生成するインフラストラクチャによって xsi:type を追加できますが、これはデフォルトではありません。関連するケースとして、要素が xs:any 型または抽象型を持つが、値がそれと互換性がない場合があります。このような場合、PyXB は型を追加して、受信者が要素のコンテンツを解釈できるようにします。

要するに、スキーマが不完全である可能性が最も高いのですが、PyXB が鈍い可能性があります。自己完結型スキーマで問題を再現できる場合は、github で問題を報告してください。

または、スキーマを変更して要素の型を決定論的にすることができない場合は、dom = instance.toDOM()xml.dom 操作を使用して DOM 構造を生成し、それを .xml で XML に変換する前に問題の属性を削除できますdom.documentElement.toxml('utf-8')

于 2014-11-23T04:00:54.407 に答える