c# - Zillow 的 SearchResults.xsd 和 Visual Studio 的 XSD 命令

标签 c# xml vb.net visual-studio xsd

我尝试在 zillow“SearchResults.xsd”上​​运行 Visual Studio 的 XSD.EXE 实用程序来生成 c# 或 vb.net 类,但我没有运气,正在寻求帮助。我不断收到错误(见下文)。这是我从 http://www.zillow.com/howto/api/GetDeepSearchResults.htm 下载的原始文件:

<?xml version="1.0" encoding="utf-8"?>

<xsd:schema attributeFormDefault="unqualified"
    elementFormDefault="unqualified"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.zillow.com/static/xsd/SearchResults.xsd"     
    xmlns:ZillowTypes="http://www.zillow.com/static/xsd/ZillowTypes.xsd">

    <xsd:import namespace="http://www.zillow.com/static/xsd/ZillowTypes.xsd"
    schemaLocation="/vstatic/4/static/xsd/ZillowTypes.xsd"  />

    <xsd:element name="searchresults">
        <xsd:complexType>
            <xsd:sequence>

                <xsd:element name="request">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="address" type="xsd:string" />
                            <xsd:element name="citystatezip" type="xsd:string" />
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>

                <xsd:element name="message" type="ZillowTypes:Message" />

                <xsd:element minOccurs="0" name="response">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="results">
                                <xsd:complexType>
                                    <xsd:sequence>
                                        <xsd:element minOccurs="1" maxOccurs="unbounded" name="result" type="ZillowTypes:SimpleProperty" />
                                    </xsd:sequence>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>

            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

以下是我在 Visual Studio 2010 中尝试 XSD.EXE 时不断遇到的错误:

C:\Users\username\Documents>xsd /classes SearchResults.xsd
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Schema validation warning: Type 'http://www.zillow.com/static/xsd/ZillowTypes.xsd:Message' is not declared. Line 25, position 6.
Schema validation warning: Type 'http://www.zillow.com/static/xsd/ZillowTypes.xsd:SimpleProperty' is not declared. Line 33, position 12.

Warning: Schema could not be validated. Class generation may fail or may produce
 incorrect results.

Error: Error generating classes for schema 'SearchResults'.
  - The datatype 'http://www.zillow.com/static/xsd/ZillowTypes.xsd:Message' is missing.

看起来一切都在 ZillowTypes.xsd 中定义,所以我很困惑。

最佳答案

设置有几个问题。从 XSD 文件的位置开始,它应该位于 http://www.zillow.com/static/xsd/SearchResults.xsd

上面的 XSD 引用了另一个 xsd,它使用带有相对 uri /vstatic/4/static/xsd/ZillowTypes.xsd 的导入,解析为 http://www.zillow.com/vstatic/4/static/xsd/ZillowTypes.xsd - 但此 URL 不可取消引用 (404)!!

如果改为尝试 http://www.zillow.com/static/xsd/ZillowTypes.xsd然后您找到了拼图的第 2 部分,即 ZillowTypes.xsd。

由于这些错误,您需要将这两个 XSD 文件下载到本地计算机以修复它们。

首先下载SearchResults.xsd,然后下载ZillowTypes.xsd;将它们放在同一个文件夹中。

通过更改以下行来编辑 SearchResults.xsd:

<xsd:import namespace="http://www.zillow.com/static/xsd/ZillowTypes.xsd" schemaLocation="/vstatic/4/static/xsd/ZillowTypes.xsd" /> 

到:

<xsd:import namespace="http://www.zillow.com/static/xsd/ZillowTypes.xsd" schemaLocation="ZillowTypes.xsd"  />

然后你遇到了另一个问题。 ZillowTypes.xsd 包含无效的元素声明!所以编辑下面的声明:

<xsd:complexType name="investmentBuyingBlock">
    <xsd:sequence>
        <xsd:element name="buying" minOccurs="0" maxOccurs="unbounded">
            <xsd:sequence>
                <xsd:element name="year" type="xsd:integer"/>
                <xsd:element name="rentalIncome" type="xsd:integer"/>
                <xsd:element name="otherIncome" type="xsd:integer"/>
                <xsd:element name="mortgagePayment" type="xsd:integer"/>
                <xsd:element name="principal" type="xsd:integer"/>
                <xsd:element name="interest" type="xsd:integer"/>
                <xsd:element name="hoaFees" type="xsd:integer"/>
                <xsd:element name="propertyTaxes" type="xsd:integer"/>
                <xsd:element name="utilities" type="xsd:integer"/>
                <xsd:element name="renovations" type="xsd:integer"/>
                <xsd:element name="maintainCosts" type="xsd:integer"/>
                <xsd:element name="homeOwnerInsurance" type="xsd:integer"/>
                <xsd:element name="managementFees" type="xsd:integer"/>
                <xsd:element name="advertisingCosts" type="xsd:integer"/>
                <xsd:element name="otherExpenses" type="xsd:integer"/>
                <xsd:element name="totalExpenses" type="xsd:integer"/>
                <xsd:element name="opportunityCostInitial" type="xsd:integer"/>
                <xsd:element name="opportunityCostYearly" type="xsd:integer"/>
                <xsd:element name="depreciationBuilding" type="xsd:integer"/>
                <xsd:element name="depreciationrenovation" type="xsd:integer"/>
                <xsd:element name="totalBenefit" type="xsd:integer"/>
                <xsd:element name="totalProfitLoss" type="xsd:integer"/>
            </xsd:sequence>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

收件人:

<xsd:complexType name="investmentBuyingBlock">
    <xsd:sequence>
        <xsd:element name="buying" minOccurs="0" maxOccurs="unbounded">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="year" type="xsd:integer"/>
                    <xsd:element name="rentalIncome" type="xsd:integer"/>
                    <xsd:element name="otherIncome" type="xsd:integer"/>
                    <xsd:element name="mortgagePayment" type="xsd:integer"/>
                    <xsd:element name="principal" type="xsd:integer"/>
                    <xsd:element name="interest" type="xsd:integer"/>
                    <xsd:element name="hoaFees" type="xsd:integer"/>
                    <xsd:element name="propertyTaxes" type="xsd:integer"/>
                    <xsd:element name="utilities" type="xsd:integer"/>
                    <xsd:element name="renovations" type="xsd:integer"/>
                    <xsd:element name="maintainCosts" type="xsd:integer"/>
                    <xsd:element name="homeOwnerInsurance" type="xsd:integer"/>
                    <xsd:element name="managementFees" type="xsd:integer"/>
                    <xsd:element name="advertisingCosts" type="xsd:integer"/>
                    <xsd:element name="otherExpenses" type="xsd:integer"/>
                    <xsd:element name="totalExpenses" type="xsd:integer"/>
                    <xsd:element name="opportunityCostInitial" type="xsd:integer"/>
                    <xsd:element name="opportunityCostYearly" type="xsd:integer"/>
                    <xsd:element name="depreciationBuilding" type="xsd:integer"/>
                    <xsd:element name="depreciationrenovation" type="xsd:integer"/>
                    <xsd:element name="totalBenefit" type="xsd:integer"/>
                    <xsd:element name="totalProfitLoss" type="xsd:integer"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

通过替换重新运行 XSD 命令行

搜索结果.xml

SearchResults.xsd ZillowTypes.xsd

它应该可以工作(至少 XSD 现在有效)。

关于c# - Zillow 的 SearchResults.xsd 和 Visual Studio 的 XSD 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13239726/

相关文章:

c# - 使用 ResourceWrapper 在 Silverlight 4 中进行本地化

c# - resharper 协变数组转换 - 矛盾修复

c# - 处理多个表单之间的数据

java - 提高与 ViewFlipper 一起使用的实例化和膨胀 View 的性能

javascript - 在带有 VB 代码隐藏的 ASP 中,如何向用户显示 VB 中的是/否对话框

vb.net - 为什么 DateTimePicker 不会用 tab 键触发 keyDown 和 KeyPress 事件?

c# - 如何在报表查看器中添加参数?

java - 如何从 XML 文件中删除多余的空行?

Java 和 Spring Bean : Create a bean with multiple Generic Types

c# - 请向 vb-er 解释 C# 语法