2014-09-23 17 views
5

varsayalım Şöyle bir XML dosyası var: O Siparişi No 11 belirtmek için,nasıl bir XML şema özniteliği tarafından sıralanmasını unsurları gerektirebilir?

<Transactions> 
<Transaction OrderID="5"> ... </Transaction> 
<Transaction OrderID="6"> ... </Transaction> 
<Transaction OrderID="11"> ... </Transaction> 
<Transaction OrderID="7"> ... </Transaction> 
</Transactions> 

XML şeması kullanma mümkündür doğru sırayla değil mi? Her işlem elemanı ayrı ayrı doğrulama geçer, fakat Orderıd artan sırada olmalıdır.

Ve ilgili bir soru: Bir geçerlilik kuralı numara atlanabilir olup olmadığını gösterebilir miyim? Örneğin , # 8,9 veya hiçbir işlem yoktur 10.

cevap

1

sizin doğrulayıcı XSD 1.1 destekliyorsa, xs kullanabilirsiniz: iddia böyle belirli özellik değerlerini inkar etmek: Bunun günümüze

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
      elementFormDefault="qualified" 
      attributeFormDefault="unqualified" 
      vc:minVersion="1.1"> 
    <xs:element name="Transactions"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Transaction" maxOccurs="unbounded"> 
       <xs:complexType mixed="true"> 
        <xs:attribute name="OrderID" type="xs:integer"/> 
        <xs:assert test="empty(index-of((8,9,10),@OrderID))"/> 
       </xs:complexType>         
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

ikinci soruna cevap ver. İlk sorunuz gelince

, ben sipariş doğrulama mümkün olduğunu düşünmüyorum. Bununla birlikte, XML belgesini sıralamak için XSLT'yi kullanabilirsiniz.

-----

ilk soru -----

Michael Kay teşekkür ederiz cevabını ekledi. Şey ... işte ilk sorunun cevabı.

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Transactions"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Transaction" maxOccurs="unbounded"> 
        <xs:complexType mixed="true"> 
         <xs:attribute name="OrderID" type="xs:integer"/> 
         <xs:assert test="empty(index-of((8,9,10),@OrderID))"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:assert test="every $x in Transaction satisfies 
          (empty($x/preceding-sibling::*) or 
          ($x/@OrderID gt $x/preceding-sibling::*[1]/@OrderID))"/> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+2

Evet, sipariş doğrulama mümkündür. Örneğin, ' –

+0

Teşekkürler Chong Lip Phang. Dürüst olmak gerekirse, sorunun cevabını çözüp çözmediğini bilmek için cevabınızı yeterince anlamadım. Eğer yazdığında tahminen 8,9,10 SiparişNo belirli değerlere atıfta? Üzerinde çalıştığım dosyada yaklaşık 30 bin işlem var. Benim için çalışan herhangi bir yöntemin, OrderID için belirli değerlere başvurmadan çalışması gerekir. İkinci Selecter

+0

Evet, , OrderID değeri 8,9 veya 10 ise, onaylamanın başarısız olmasına neden olur. XML verileri çok, o zaman belirli bir desenle eşleşmesi için muhtemelen bir kurala ihtiyacınız vardır. Bu onaylama kuralını ihmal ederseniz ve OrderID 8,9 veya 10 atlarsa doğrulama geçerliliğini kaybeder. –

İlgili konular