2011-02-04 119 views
1

我有XSD如下:Visual Studio XSD工具错误?

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="Test" 
    targetNamespace="http://tempuri.org/Test.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/Test.xsd" 
    xmlns:mstns="http://tempuri.org/Test.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 
    <xs:complexType name="TestCurrency"> 
     <xs:sequence> 
      <xs:element name="CurrencyRef" minOccurs="1" maxOccurs="1" type="xs:int"/> 
      <xs:element name="CurrentRefSpecified" minOccurs="1" maxOccurs="1" type="xs:int"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:element name="Currency" type="TestCurrency"/> 

</xs:schema> 

当我在VS跑了XSD工具下面的命令2008年命令提示符: XSD /班/语言:VB test.xsd

我得到下面的代码

'------------------------------------------------------------------------------ 
' <auto-generated> 
'  This code was generated by a tool. 
'  Runtime Version:2.0.50727.3615 
' 
'  Changes to this file may cause incorrect behavior and will be lost if 
'  the code is regenerated. 
' </auto-generated> 
'------------------------------------------------------------------------------ 

Option Strict Off 
Option Explicit On 

Imports System.Xml.Serialization 

' 
'This source code was auto-generated by xsd, Version=2.0.50727.3038. 
' 

'''<remarks/> 
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038"), _ 
System.SerializableAttribute(), _ 
System.Diagnostics.DebuggerStepThroughAttribute(), _ 
System.ComponentModel.DesignerCategoryAttribute("code"), _ 
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://tempuri.org/Test.xsd"), _ 
System.Xml.Serialization.XmlRootAttribute("Currency", [Namespace]:="http://tempuri.org/Test.xsd", IsNullable:=false)> _ 
Partial Public Class TestCurrency 

    Private currencyRefField As Integer 

    Private currentRefSpecified1Field As Integer 

    '''<remarks/> 
    Public Property CurrencyRef() As Integer 
     Get 
      Return Me.currencyRefField 
     End Get 
     Set 
      Me.currencyRefField = value 
     End Set 
    End Property 

    '''<remarks/> 
    <System.Xml.Serialization.XmlElementAttribute("CurrentRefSpecified")> _ 
    Public Property CurrentRefSpecified1() As Integer 
     Get 
      Return Me.currentRefSpecified1Field 
     End Get 
     Set 
      Me.currentRefSpecified1Field = value 
     End Set 
    End Property 
End Class 

当我指定的元素是CurrentRefSpecified。为什么它在生成的类中显示为CurrentRefSpecified1?它是否与XSD或我的问题有关?

任何人都可以快速回答这个问题吗?

,当我们有元素名称说这追加自动发生“xyzspecified” ..在类文件的属性设置为xyzspecified1 ...

回答

1

我不知道肯定做,但这里是我的假设:对于XML中的某些字段,如果可以省略或指定它们,xsd.exe将生成一个名为(yourfieldname)Specified的相应字段,用于指示是否实际指定了可能的可填写/缺失值。

现在,这是不是你的样品的情况下的任何地方,因为它现在是 - 但如果你会改变你的XSD使你的领域CurrentRef是的nillable还是有它minOccurs=0,那么xsd.exe工具将必须创建一个CurrentRefSpecified它的助手字段,这将与XSD中已经存在的字段冲突。

我猜测为了避免任何潜在的(未来)冲突,xsd工具会将您的字段CurrentRefSpecified重命名为CurrentRefSpecified1

+0

感谢您的快速回复marc_s – Sathish 2011-02-04 08:11:19