2012-05-28 50 views
0

我下面如何寫XSD驗證逃脫XML數據模式

<l7:ApiPlans xmlns:l7="http://ns.xcompany.com/2012/04/api-management"> 
    <l7:ApiPlan> 
<l7:PlanPolicy> 

&lt;wsp:Policy xmlns:L7p="http://www.xcompany.com/ws/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy"&gt; 
&lt;wsp:All wsp:Usage="Required"&gt; 
    &lt;wsp:All wsp:Usage="Required"&gt; 
      ...... some other welformed xml 
&lt;/wsp:All&gt; 
    &lt;/wsp:All&gt; 
&lt;/wsp:Policy&gt; 
    </l7:PlanPolicy> 
    </l7:ApiPlan> 
</l7:ApiPlans> 

,我需要寫一個XSD(如果可能),以驗證PlanPolicy與

&lt;wsp:Policy xmlns:L7p="http://www.xcompany.com/ws/policy"  
xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy"&gt; 
&lt;wsp:All wsp:Usage="Required"&gt; 
    &lt;wsp:All wsp:Usage="Required"&gt; 
啓動一個特定的XML數據

&lt;/wsp:All&gt; 
     &lt;/wsp:All&gt; 
    &lt;/wsp:Policy&gt; 

到目前爲止,我有這個,

結束10
<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://ns.xcompany.com/2012/04/api-management" xmlns:l7="http://ns.xcompany.com/2012/04/api-management"> 
<xs:element name="ApiPlans"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element maxOccurs="unbounded" ref="l7:ApiPlan"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:element name="ApiPlan"> 
    <xs:complexType> 
     <xs:sequence>    
      <xs:element ref="l7:PlanPolicy"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:element name="PlanPolicy" type="policyDataType"/> 
<simpleType name="policyDataType"> 
    <restriction base="xs:string"> 
     <minLength value="1"></minLength> 
     <pattern value="(&lt;).*(&gt;).*(&lt;).*(&gt;)"></pattern> 
    </restriction> 
</simpleType> 
</xs:schema> 

這可能嗎?作爲一個側面問題,你如何在模式中定義:新行(CR/LF),製表符和引號。

在此先感謝

回答

-1

是的,這是絕對有可能的,而正則表達式是你這個非典型的任務唯一的選擇。請注意,轉義的內容不會作爲XML處理,而是作爲字符串處理。

請務必在正則表達式中閱讀如何正確地使用escape various special characters(包括括號)。

換行符和製表符分別由\n\t m表示。

報價可以加倍輸入。

+0

感謝需要的參考:) – cyber01

2

我不會試圖這樣做。

好吧,給出一半的選擇,我不會在XML中使用轉義的XML - XML被設計爲無需轉義就嵌套,並且轉義它只會讓每個人的生活更加困難。

但是,如果你必須像這樣生活下去,我會在提取並解析它之後分別驗證內部XML。沒有必要在一個驗證過程中做所有事情。

+0

我實際上也在考慮這樣做。但不幸的是我堅持以合適的方式來執行此任務。我可以使用 – cyber01