2011-09-28 165 views
0

我有一個XSD嵌入到一個XML這樣的:
不區分大小寫鍵

<Replacements> 
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xs:element name="Replacements"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Replace" /> 
       </xs:sequence> 
      </xs:complexType> 
      <xs:key name="ReplaceKey"> 
       <xs:selector xpath="./Replace"/> 
       <xs:field xpath="@old"/> 
      </xs:key> 
     </xs:element> 
     <xs:element name="Replace"> 
      <xs:complexType> 
       <xs:attribute name="old" type="AnythingButLowerCase" use="required" /> 
       <xs:attribute name="new" type="xs:string" use="required" /> 
      </xs:complexType> 
     </xs:element> 
     <xs:simpleType name="AnythingButLowerCase"> 
      <xs:restriction base="xs:string"> 
       <xs:pattern value="[^a-z]+"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:schema> 
    <Replace old="A1020____9" new="A1020"/> 
    <Replace old="a1020____9" new="A1020"/> 
</Replacements> 

我使用的xs:關鍵定義的「老」替換元素屬性的唯一鍵。
我的問題是我想這個密鑰是不區分大小寫的。
我看了這麼多文件,說明我可以使用XSD功能,如大寫或轉化爲解決這個問題,但如果我喜歡寫東西

<xs:field xpath="upper-case(@old)"/> 

VS2010給了我這樣一個警告:

 
'upper-case(@old)' is an invalid XPath for selector or field. 

我做錯了什麼?

謝謝:)

回答

0

好的!
我明白了!

不允許在xpath中使用xs:field中的函數。

什麼,我正在尋求解決方法是定義一個簡單類型,把一個有限制不允許小寫字母。
事情是這樣的:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
<Replacements> 
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xs:element name="Replacements"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Replace" /> 
       </xs:sequence> 
      </xs:complexType> 
      <xs:key name="ReplaceKey"> 
       <xs:selector xpath="./Replace"/> 
       <xs:field xpath="@old"/> 
      </xs:key> 
     </xs:element> 
     <xs:element name="Replace"> 
      <xs:complexType> 
       <xs:attribute name="old" type="AnythingButLowerCase" use="required" /> 
       <xs:attribute name="new" type="xs:string" use="required" /> 
      </xs:complexType> 
     </xs:element> 
     <xs:simpleType name="AnythingButLowerCase"> 
      <xs:restriction base="xs:string"> 
       <xs:pattern value="[^a-z]+"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:schema> 
    <Replace old="A1020____9" new="A1020"/> 
    <Replace old="a1020____9" new="A1020"/> 
</Replacements> 

現在這成爲了我想要它。

1

正確的XPath函數是「大寫」而不是「大寫」。只需在連字符中添加即可。

+0

我使用大寫,它只是在這裏打錯輸入。但沒有運氣...... – Achilles