jjzjj

c# - XML 元素具有无效的子元素 'X',应为 'X'

coder 2024-07-05 原文

我已经创建了一些 XSD 架构,并在尝试在 C# 中读取时收到以下错误:

The element PartnerPSTNTransfer in namespace 'http://localhost/Orders-PartnerPSTNTransfer-v1-0' has invalid child element 'StartDate' in namespace 'http://localhost/Orders-Connection-v1-0'.
List of possible elements expected: 'StartDate' in namespace 'http://localhost/Orders-PartnerPSTNTransfer-v1-0'.

然而,预期的元素是 StartDate 并且它存在于 xml 文件中,所以我不确定为什么会显示此错误。我将为我创建的模式附加 .xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="PartnerPSTN"
    targetNamespace="http://localhost/Orders-PartnerPSTN-v1.0"
    elementFormDefault="qualified"
    xmlns="http://localhost/Orders-PartnerPSTN-v1.0"
    xmlns:mstns="http://localhost/Orders-PartnerPSTN-v1.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:a="http://localhost/Orders-Address-v1-0"
    xmlns:c="http://localhost/Orders-Common-v1-0" >

  <xs:simpleType name="Contract">
    <xs:restriction base="xs:token">
      <xs:enumeration value="Monthly_12"></xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="PackageOption">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Data Only" />
      <xs:enumeration value="Free Evening and Weekend" />
      <xs:enumeration value="1000 Anytime" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="FeatureOption">
    <xs:list>
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="Feature0"/>
          <xs:enumeration value="Feature0.A"/>
          <xs:enumeration value="Feature0.B"/>
          <xs:enumeration value="Feature0.C"/>
          <xs:enumeration value="Feature1"/>
          <xs:enumeration value="Feature2"/>
          <xs:enumeration value="Feature2.A"/>
          <xs:enumeration value="Feature3"/>
          <xs:enumeration value="Feature3.A"/>
          <xs:enumeration value="Feature3.B"/>
          <xs:enumeration value="Feature3.C"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:list>
  </xs:simpleType>

  <xs:complexType name="PartnerPSTNConfiguration">
    <xs:sequence>
      <xs:element name="Package" type="PackageOption" />
      <xs:element name="Feature" type="FeatureOption" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

模式 2:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="PartnerPSTNTransfer"
    targetNamespace="http://localhost/Orders-PartnerPSTNTransfer-v1-0"
    elementFormDefault="qualified"
    xmlns="http://localhost/Orders-PartnerPSTNTransfer-v1-0"
    xmlns:mstns="http://localhost/Orders-PartnerPSTNTransfer-v1-0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:a="http://localhost/Orders-Address-v1-0"
    xmlns:padsl="http://localhost/Orders-PartnerPSTN-v1.0"
    xmlns:c="http://localhost/Orders-Common-v1-0"
    xmlns:conn="http://localhost/Orders-Connection-v1-0">

  <xs:import namespace="http://localhost/Orders-Common-v1-0" schemaLocation="../../Common.xsd" />
  <xs:import namespace="http://localhost/Orders-PartnerPSTN-v1.0" schemaLocation="PartnerPSTN.xsd" />

  <xs:complexType name="PartnerPSTNTransfer">
    <xs:sequence>
      <xs:element name="TelephoneNumber" type="c:Landline" />
      <xs:element name="StartDate" type="xs:date" />
      <xs:element name="Postcode" type="c:RequiredString" />
      <xs:element name="Configuration" type="padsl:PartnerPSTNConfiguration" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="PartnerPSTNTransfer" type="PartnerPSTNTransfer"></xs:element>
</xs:schema>

编辑

这是我要验证的 XML:

<p:PartnerPSTNTransfer xmlns:padsl="http://localhost/Orders-PartnerPSTN-v1.0"
xmlns:p="http://localhost/Orders-PartnerPSTNTransfer-v1-0"
xmlns:a="http://localhost/Orders-Address-v1-0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://localhost/Orders-Connection-v1-0">
  <p:TelephoneNumber>01111111111</p:TelephoneNumber>
  <c:StartDate>2014-10-10T00:00:00</c:StartDate>
  <c:Postcode>XX1 1XX</c:Postcode>
   <p:Configuration>
    <padsl:Contract>MA</padsl:Contract>
    <padsl:PackageOption>Weekend</padsl:PackageOption>
    <padsl:Featureoption>Feature0 Feature2.A</padsl:Featureoption>
  </p:Configuration>
</p:PartnerPSTNTransfer>

编辑 2

XML 到目前为止。我相信我已经删除了原来的问题,尽管它现在说:

The element 'Configuration' in namespace 'http://localhost/Orders-PartnerPSTNTransfer-v1-0' has invalid child element 'Contract' in namespace 'http://localhost/Orders-PartnerPSTN-v1.0'.

XML 是:

<p:PartnerPSTNTransfer xmlns:padsl="http://localhost/Orders-PartnerPSTN-v1.0"
xmlns:p="http://localhost/Orders-PartnerPSTNTransfer-v1-0"
xmlns:a="http://localhost/Orders-Address-v1-0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://localhost/Orders-Connection-v1-0">
  <p:TelephoneNumber>01111111111</p:TelephoneNumber>
  <p:StartDate>2014-10-10</p:StartDate>
  <p:Postcode>EX20 1LP</p:Postcode>
   <p:Configuration>
    <padsl:Package>Free Evening and Weekend</padsl:Package>
    <padsl:Feature>Feature0 Feature2.A</padsl:Feature>
    <padsl:Contract>Monthly_12</padsl:Contract>
  </p:Configuration>
</p:PartnerPSTNTransfer>

最佳答案

您的 xml 实例表示它正在寻找一个名为 StartDate 的元素,该元素在命名空间 http://localhost/Orders-Connection-v1-0 下的架构中某处定义。 :

<c:StartDate>2014-10-10T00:00:00</c:StartDate>

哪里:

xmlns:c="http://localhost/Orders-Connection-v1-0"

但是,您的架构将此元素定义为属于命名空间 http://localhost/Orders-PartnerPSTNTransfer-v1-0 下称为 PartnerPSTNTransfer 的类型

因此您需要修改您的实例,以便 StartDate 引用正确的命名空间,它包含类型定义在下面。您已经在命名空间前缀“p”下引用了根级别的命名空间,因此您应该能够:

<p:StartDate>2014-10-10T00:00:00</p:StartDate>

(对于 PostCode 元素也是如此)。

编辑

在回答问题的第二部分时,xml 实例解析为命名空间 http://localhost/Orders-PartnerPSTN-v1.0 中类型 PartnerPSTNConfiguration 中定义的名为 Contract 的元素。

但是,架构中 PartnerPSTNConfiguration 的定义不包含 Contract 的定义,仅包含 Package 和 Feature:

<xs:complexType name="PartnerPSTNConfiguration">
  <xs:sequence>
    <xs:element name="Package" type="PackageOption" />
    <xs:element name="Feature" type="FeatureOption" />
  </xs:sequence>
</xs:complexType>

因此,为了有效,您必须在 PartnerPSTNConfiguration 类型定义中对 Contract 元素建模,例如:

<xs:complexType name="PartnerPSTNConfiguration">
  <xs:sequence>
    ...
    <xs:element name="Contract" type="SomeType" />
  </xs:sequence>
</xs:complexType>

或者,将您的实例更改为不期望它在那里。

关于c# - XML 元素具有无效的子元素 'X',应为 'X',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26096771/

有关c# - XML 元素具有无效的子元素 'X',应为 'X'的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. 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..

  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 - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  6. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  7. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  10. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

随机推荐