2017-04-13 18 views
0

xsd(複数のスキーマを持つ)に対して検証したいxmlがあります。 XMLは以下の通りである。xmlが名前空間接頭辞なしで検証されていない

<?xml version="1.0" encoding="utf-8"?> 
<Interchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.abc.com.au/eApplications/Interchange/4.2"> 
    <InterchangeID>19768</InterchangeID>......</Interchange> 

このXMLが検証に合格しなかったと私は次のエラーを与えていた。

xmlns:ns="http://www.abc.com.au/eApplications/Interchange/4.2" 
:私はこのようなXMLで名前空間を導入

The 'http://www.abc.com.au/eApplications/Interchange/4.2:Interchange' element is not declared. 

のような名前空間接頭辞を導入しなかったとしても、エラーはなくなりました。 回の

私の調査結果: 私は紹介するいずれかの場合、XMLが検証に合格:定義されたすべての名前空間の参照を含むNS名前空間としてか(親インターチェンジタグの後に)完全に行を削除すると、そのようにそれを維持します:

明らかに良くない。

私は方法でこの問題を解決することができたものの前述したが、私は多くのリンクthisを経た後に、それを見つけることができなかったとして、この背後にある理由を知りたい、A Ten-Minute Guide to XML NamespacesXML Namespaces Explained

編集 私はここでXSDを装着しています:

enter code here 
<xs:schema xmlns:eapp="http://www.abc.com.au/eApps/iChange/4.2" 
    elementFormDefault="qualified" 
     targetNamespace="http://www.abc.com.au/eApps/iChange/4.2" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

     <xs:include schemaLocation="abc_datatypes.xsd"/> 
     <xs:complexType name="abcType"> 
     <xs:sequence> </xs:sequence> 
    </xs:complexType> 
    </xs:schema> 

    and the xml sample that passes validation is something like: 


<soapenv:Envelope xmlns:soapenv="url" 
    xmlns:orig="url/OServices" xmlns:ns="http://url/eApps/IChange/4.2"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <or:Originate> 
     <!--Optional:--> 
     <or:data> 
     <ns:InID>2229</ns:InID> 
     <ns:ReceiverID>CFS</ns:ReceiverID> 
    </or:data> 
    </or:Originate> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

'Interchange'要素のXSD定義は何ですか? – kennyzx

+0

デバッグヘルプ(「なぜこのコードは機能していませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[mcve]を作成する方法。 – kjhughes

+0

名前空間接頭辞を削除すると、ルートノードは完全に未知のノードになり、未知のノードはエラーではなく警告として扱われます。 「[XDocument.Validateは常に成功しました]」(http://stackoverflow.com/q/17232575/3744182)を参照してください。一般に、グローバルに定義された要素はすべてルート要素になります。[XML Schema:root element](http://stackoverflow.com/q/8854144/3744182)を参照してください。これは、エラーではない警告である可能性があります。 – dbc

答えて

0

TL; DR

My Findings: The xml passes the validation if I either introduce :ns as a namespace or remove the line completely (after the parent Interchange tag) containing all the namespace references defined and keep it like that:

<Interchange> 
    <InterchangeId>.... 

which is obviously not good.

両方のメソッドがデフォルトの名前空間を削除するため、検証に合格します。あなたは私たちが確認できないので、スキーマを提供しますが、これが何を言っていることは、 ``名前空間のInterchange要素が存在しないということではありませんでした

補足説明...

This xml didn't pass the validation and was giving me the following error:

The 'http://www.abc.com.au/eApplications/Interchange/4.2:Interchange' element is not declared. 

スキーマ

プレフィックス(xmlns="some uri")を持たない名前空間を宣言すると、そのコンテキストの既定の名前空間になります。

xmlns="http://www.abc.com.au/eApplications/Interchange/4.2"を完全に削除したときに検証エラーがないと言うと、Interchangeがスキーマ内の名前空間にないと思われます。あなたは接頭辞nsに名前空間URI http://www.abc.com.au/eApplications/Interchange/4.2を拘束しているためだ

When I introduced namespace with xml like this:

xmlns:ns="http://www.abc.com.au/eApplications/Interchange/4.2" 

The error was gone,...

は現在、デフォルトの名前空間がありません。

+0

はxsdとサンプルxmlで更新されました – sam

+0

正しいxmlビルドアップがあると確信していますが、間違ったスタートアップタグ( 'Interchange' )これはxsdで提供された.csを使って自動的に生成されたものです。 – sam

関連する問題