草庐IT

XML 验证 没有匹配的全局声明可用于验证根

coder 2024-06-29 原文

我有 Cisco 为 IOS XE 路由器提供的 XML 模式。当运行命令 'show ip access-list test | format' 在路由器的 cli 中,它吐出一个 XML 片段,应该验证这个模式。然而事实并非如此。相反,我收到错误“:没有匹配的全局声明可用于验证根”

Cisco 提供的架构通过运行 'show xsd-format cli show ip access-lists' 提取,如此处推荐 http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/xmlpi/command/xmlpi-cr-book/xmlpi-cr-p1.html#GUID-33CB3BAB-25B4-4FAD-9741-C7AFB483F701如下图所示:

<?xml version="1.0" encoding="UTF-8"?>
  <xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <xsd:complexType name="ShowAccesslists_def">
      <xsd:sequence>
        <xsd:element ref="SpecVersion" minOccurs="0" />
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Info" />
          <xsd:element name="Access-List" minOccurs="0" maxOccurs="1">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="Type" minOccurs="0" maxOccurs="1" type="xsd:string" />
                <xsd:element name="Name" minOccurs="0" maxOccurs="1" type="xsd:string" />
                <xsd:element name="DenyFilter" minOccurs="0" maxOccurs="1">
                  <xsd:complexType>
                    <xsd:sequence>
                      <xsd:element name="Filter" minOccurs="0" maxOccurs="1" type="xsd:string" />
                    </xsd:sequence>
                  </xsd:complexType>
                </xsd:element>
                <xsd:element name="PermitFilter" minOccurs="0" maxOccurs="1">
                  <xsd:complexType>
                    <xsd:sequence>
                      <xsd:element name="Filter" minOccurs="0" maxOccurs="1" type="xsd:string" />
                    </xsd:sequence>
                  </xsd:complexType>
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="SpecVersion" type="xsd:string" />
    <xsd:element name="Info" type="xsd:string" />
    <xsd:element name="ShowAccesslists" type="ShowAccesslists_def" />
  </xsd:schema>

路由器吐出的 XML 片段是:

<?xml version="1.0" encoding="UTF-8"?>
   <ShowAccesslists xmlns="ODM://built-in//show_access-lists">
    <Access-List>
      <Type>Extended IP</Type>
      <Name>test</Name>
      <PermitFilter>
        <Filter>10 permit ip any any</Filter>
      </PermitFilter>
      <PermitFilter>
        <Filter>20 permit tcp 0.0.0.1 255.255.255.0 any</Filter>
      </PermitFilter>
      <PermitFilter>
        <Filter>40 permit tcp host 10.22.1.128 10.11.79.0 0.0.0.255 eq domain</Filter>
      </PermitFilter>
      <PermitFilter>
        <Filter>50 permit tcp host 10.22.1.128 eq domain 10.11.79.0 0.0.0.255</Filter>
      </PermitFilter>
    </Access-List>
  </ShowAccesslists>

架构是否损坏?我如何让它进行验证?

最佳答案

答案取决于您是希望更改 XML 还是 XSD...

更改 XML

根据您的 XSD,您的 XML 不应该在命名空间中,也不应该有多个 PermitFilter 元素。

因此,如果您希望保持 XSD 不变,则以下更新的 XML 将成功验证您的 XSD。

<?xml version="1.0" encoding="UTF-8"?>
<ShowAccesslists>
  <Access-List>
    <Type>Extended IP</Type>
    <Name>test</Name>
    <PermitFilter>
      <Filter>10 permit ip any any</Filter>
    </PermitFilter>
  </Access-List>
</ShowAccesslists>

改变XSD

您的 XML 位于命名空间中并具有多个 PermitFilter 元素。

如果您希望保持 XML 不变,请将 targetNamespace 添加到您的 XSD,为该命名空间定义一个命名空间前缀,并在引用该命名空间中的组件时使用该前缀。以下更新的 XSD 准确地显示了如何执行此操作并将成功验证您的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:sal="ODM://built-in//show_access-lists" 
            targetNamespace="ODM://built-in//show_access-lists">
  <xsd:complexType name="ShowAccesslists_def">
    <xsd:sequence>
      <xsd:element ref="sal:SpecVersion" minOccurs="0" />
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="sal:Info" />
        <xsd:element name="Access-List" minOccurs="0" maxOccurs="1">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Type" minOccurs="0" maxOccurs="1" type="xsd:string" />
              <xsd:element name="Name" minOccurs="0" maxOccurs="1" type="xsd:string" />
              <xsd:element name="DenyFilter" minOccurs="0" maxOccurs="1">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="Filter" minOccurs="0" maxOccurs="1" type="xsd:string" />
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="PermitFilter" minOccurs="0" maxOccurs="unbounded">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="Filter" minOccurs="0" maxOccurs="1" type="xsd:string" />
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:choice>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="SpecVersion" type="xsd:string" />
  <xsd:element name="Info" type="xsd:string" />
  <xsd:element name="ShowAccesslists" type="sal:ShowAccesslists_def" />
</xsd:schema>

关于XML 验证 没有匹配的全局声明可用于验证根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43277806/

有关XML 验证 没有匹配的全局声明可用于验证根的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  6. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  7. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  8. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

  9. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  10. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

随机推荐