2

我正在尝试验证 .nuspec 文件中的以下 xml:

<?xml version='1.0'?>
<package>
  <metadata>
    <id>nuspec_test</id>
    <version>1.2.3</version>
    <authors>Author Name</authors>
    <description>test_xml_document</description>
  </metadata>
</package>

对于验证,我正在使用此处找到的 nuspec.xsd 文件:http: //nuget.codeplex.com/SourceControl/changeset/view/0881f2d55e70#src%2fCore%2fAuthoring%2fnuspec.xsd

我已经使用 .Net 的 System.Xml 和 Ruby 的 Nokogiri 运行了验证。这两个都显示验证失败,说明如下:

从 Nokogiri:Element 'package': No matching global declaration available for the validation root.

从 System.XML:Data at the root level is invalid. Line 1, position 1.

这个 xml 或架构有什么问题,会导致验证错误?

4

3 回答 3

2

如果您希望 xsd 进行验证,则package 元素应该位于http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd命名空间中。

请注意,大多数示例都没有 xml 命名空间,因此只能将其用于您自己的用途。

于 2011-02-25T18:55:53.643 回答
1

我认为你需要这个:<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

注意来自 NuGet.codeplex.com的必填字段

下面是我工作的一个包的例子:

<?xml version="1.0"?>
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <metadata>
    <id>SidePOP</id>
    <version>0.0.1.44</version>
    <authors>Rob Reynolds, Tim Hibbard</authors>
    <owners>Rob Reynolds</owners>
    <summary>SidePOP gives your app the ability to receive email</summary>
    <description>SidePOP allows your application the ability to receive email</description>
    <projectUrl>http://sidepop.googlecode.com</projectUrl>
    <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0</licenseUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <tags>email</tags>
    <!--<iconUrl>32x32.png</iconUrl>-->
    <dependencies>
      <dependency id="log4net" version="1.2.10" />
    </dependencies>
  </metadata>
</package>
于 2011-02-25T17:16:35.673 回答
0

请注意,如果您从 Codeplex 的源代码控制文件夹中获取 xsd,则必须将出现的任何字符串“{0}”替换为“http://schemas.microsoft.com/packaging/2010/07/nuspec .xsd”,以便 xsd 在应用于 nuspec 文件时正常工作。

不要忘记将 nuspec 文件的根元素放在http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd命名空间中:

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
于 2011-09-19T09:39:17.790 回答