我正在尝试验证以下xml,它位于.nuspec文件中:
<?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或架构出了什么问题?
答案 0 :(得分:2)
如果你想让xsd验证,那么package元素应该在http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd命名空间中。
请注意,大多数示例都没有xml命名空间,因此只能将它用于您自己的用途。
答案 1 :(得分:1)
我认为你需要这个:&lt; package xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns:xsd =“http://www.w3.org/2001/的XMLSchema“&GT;
请注意来自NuGet.codeplex.com的requied fields
以下是我工作的一个包的示例:
<?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>
答案 2 :(得分: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">