代码之家  ›  专栏  ›  技术社区  ›  Dan Atkinson

使用XSD生成类,每个类中没有基类

  •  1
  • Dan Atkinson  · 技术社区  · 15 年前

    不知道这里有什么合适的标签…

    不久前,我创建了一个批处理脚本,在运行时,该脚本将使用Microsoft Windows SDK中的xsd.exe文件(此处使用v6.1)将C:\api\中找到的所有.xsd文件转换为C类。

    @ECHO OFF
    CLS
    ECHO ***
    ECHO Runs xsd.exe on all *.xsd files sorted by filename in the current folder.
    ECHO ***
    
    FOR /R "C:\api" %%G IN (*.xsd) DO (
      @ECHO ON
      "C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\xsd.exe" "C:\api\base\base.xsd" "%%G" /c /n:Mynamespace /o:"C:\api"
      @ECHO OFF
    )
    

    问题是…我有大约50个生成的.cs文件,包括基类。在每一个类中,它生成一个基类的副本,所以当我只需要它在一个类中时,我最终得到了每个类中的基类。

    有没有一种方法可以防止在每个类中没有基类的情况下生成类?我仍然希望创建基类(base.cs),但不希望在其他49个类中创建。

    编辑:

    我尝试了以下方法:

    @ECHO OFF
    SET str1=
    FOR /R "C:\api" %%G IN (*.xsd) DO (
      SET str1="%%G" %str1%
    )
    
    ECHO %str1%
    

    返回的响应始终是列表中的最后一个文件。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Vinz    15 年前

    可以将多个XML架构文件传递到 xsd.exe 而不是在文件中循环并分别传递每个文件。但是,正在传递的架构文件列表不是动态的…

    此外,这只创建一个.cs文件,以列表中第一个XML架构文件命名,其中包含所有类。

        2
  •  2
  •   PA.    15 年前

    对于第二个问题,你必须设置 延迟膨胀 .

    使用 !str! 而不是 %str%

    试试这个

    SETLOCAL enabledelayedexpansion
    @ECHO OFF
    SET str1=
    FOR /R "C:\api" %%G IN (*.xsd) DO (
      SET str1="%%G" !str1!
    )
    ECHO !str1!