我想问一下是否可以让一个元素在xsd:all之后重复。像这样:
<xsd:complexType name="animal">
<xsd:all>
<xsd:element name="name" type="nameType"/>
<xsd:element name="price" type="salaryType"/>
</xsd:all>
<xsd:element name="note" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:complexType>
这是无效的,因为 xsd:all 之后不能有元素,我该如何实现?
最佳答案
您不能将 element 作为 complexType 的子元素。您需要在 sequence 中使用类似 all 的组,但这也是非法的(all 必须是复杂类型的顶层,而且它也不能包含组——只有元素和引用)。所以 all 太受限制了,无法做你想做的事。
一个解决方案是不使用 all 而是使用不同的组并对其进行配置,使其表现得像您声明的 all 组。这里有一些选择。您可以选择适合自己的一种,也可以进行一些试验并调整一种。
1) choice 元素允许您从一组中选择一个。使用 maxOccurs="unbounded" 声明一个 choice 组会给你一个类似的效果,然后你可以在一个 中嵌套一个 获得你所期望的:choice sequence
<xsd:complexType name="animal">
<xsd:sequence>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="price" type="xsd:string"/>
</xsd:choice>
<xsd:element name="note" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
只选择一个元素进行选择,但由于您可以有多个选择组,因此效果将允许您以任意顺序拥有多个元素。它不是 100% 等同于 all 虽然:因为没有 minOccurs 你需要至少有一个 price 或一个 name,但它不需要两者。这将是有效的:
<price></price>
<name></name>
<name></name>
<name></name>
<price></price>
<name></name>
<price></price>
<price></price>
<note></note>
<note></note>
<note></note>
还有这个:
<price></price>
<name></name>
还有这个:
<price></price>
如果什么都没有或只有一个注释,它将失败。
2) 如果您需要保证两者 成对出现,那么您需要一个序列:
<xsd:sequence>
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="price" type="xsd:string"/>
</xsd:sequence>
<xsd:element name="note" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
如果只有
3) 如果您想在任何顺序中允许 但这将允许名称/价格对以任何顺序排列。你仍然不能: 4) 如果您不想让 这些都不与price 或 name 存在,这将使验证失败,但如果 price 出现在之前,它也会失败 name 因为它强制执行命令。 name/price 对,您可以声明一个选择 包含两个 sequences:<xsd:complexType name="animal">
<xsd:sequence>
<xsd:choice maxOccurs="unbounded">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="price" type="xsd:string"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="price" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:choice>
<xsd:element name="note" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<price/>
<price/>
<name/>
names 和 prices 以任何顺序排列,但也允许不平衡的对,并且 no names 或 prices,或者一个空的 animal,那么你可以使用这个:<xsd:element name="animal" type="animal" />
<xsd:complexType name="animal">
<xsd:sequence>
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="price" type="xsd:string"/>
</xsd:sequence>
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
<xsd:element name="price" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
<xsd:element name="note" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
all 相同,但根据您的需要,其中一个或一些组合可能满足您的需要。
关于xml - xsd :all 后的重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22556920/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
在Rails4.1中,ActiveRecorddestroy_all是否将整个函数包装在一个事务中?例如,如果我有一堆记录,我对其执行了destroy_all操作,它们对这些单独的对象运行了一些回调,其中一个失败了,整个操作会在那个时候回滚吗? 最佳答案 看起来不像:#Fileactiverecord/lib/active_record/relation.rb,line386defdestroy_all(conditions=nil)ifconditionswhere(conditions).destroy_allelseto_a.
我是HanamiWorld的新人。我已经写了这段代码:moduleWeb::Views::HomeclassIndexincludeWeb::ViewincludeHanami::Helpers::HtmlHelperdeftitlehtml.headerdoh1'Testsearchengine',id:'title'hrdiv(id:'test')dolink_to('Home',"/",class:'mnu_orizontal')link_to('About',"/",class:'mnu_orizontal')endendendendend我在模板上调用了title方法。htm
在Ruby中,是否有一种简单的方法可以将n维数组中的每个元素乘以一个数字?这样:[1,2,3,4,5].multiplied_by2==[2,4,6,8,10]和[[1,2,3],[1,2,3]].multiplied_by2==[[2,4,6],[2,4,6]]?(很明显,我编写了multiplied_by函数以区别于*,它似乎连接了数组的多个副本,不幸的是这不是我需要的)。谢谢! 最佳答案 它的长格式等价物是:[1,2,3,4,5].collect{|n|n*2}其实并没有那么复杂。你总是可以使你的multiply_by方法:c
给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby
这就是我做的a="%span.rockets#diamonds.ribbons.forever"a=a.match(/(^\%\w+)([\.|\#]\w+)+/)putsa.inspect这是我得到的#这就是我想要的#帮助?我尝试过但失败了:( 最佳答案 通常,您不能获得任意数量的捕获组,但如果您使用扫描,您可以为您想要捕获的每个标记获得一个匹配:a="%span.rockets#diamonds.ribbons.forever"a=a.scan(/^%\w+|\G[.|#]\w+/)putsa.inspect["%span","