0

Web サービス関数を呼び出すと、次の応答 xml が返されます。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
  <soap:Body>
    <Response>
      <Result>
        <Status>Success</Status>
        <Text>Some text</Text>
      </Result>
     </Response>
 </soap:Body>
</soap:Envelope>

ご覧のとおり、応答 xml には soap 名前空間が含まれていません。

soap-stuff を削除して xml を変換したいのですが、xsl 変換を行っているときに、soap 名前空間を次のように応答 xml に追加することでこれを機能させました。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Response>
      <Result>
        <Status>Success</Status>
        <Text>Some text</Text>
      </Result>
     </Response>
 </soap:Body>
</soap:Envelope>

SOAP 名前空間が応答 xml に含まれていない場合、この変換を行うにはどうすればよいですか?

4

2 に答える 2

1

その入力は整形式ですが、名前空間整形式 XML ではありません。名前空間を認識しないように構成されたパーサーを使用してDOMツリーに解析し、次のようなXSLT構造を使用できる場合があります

<xsl:template match="*[local-name() = 'soap:Envelope']">

しかし、それが可能かどうか、また可能であれば正確にどのように行うかは、使用している XSLT プロセッサによって異なります。それを知らずに、より詳細な答えを出すことはできません。

于 2012-11-14T13:01:09.507 に答える
-1

それは私が不正な形式のXMLと呼ぶものです。何を使って変換しようとしても、賢明なXSLTパーサーは、「UnboundPrefix」エラーの変種を生成します。ソースドキュメントは名前空間の使用法について「混乱」しているため、後続のXSLTも混乱します。

差出人Namespaces in XML 1.1

名前空間制約:プレフィックス宣言

名前空間プレフィックスは、xmlまたはxmlnsでない限り、プレフィックスが使用される要素の開始タグまたは祖先要素(つまり、プレフィックス付きマークアップがコンテンツに含まれる要素)のいずれかの名前空間宣言属性で宣言されている必要があります。 )。 さらに、そのような宣言の最も内側の属性値は、空の文字列であってはなりません。

このWebサービスを公開している人に連絡して、応答形式を適切なXMLに変更するように依頼する必要があります。

于 2012-11-14T12:49:15.510 に答える