我的部分项目涉及对用户定义的架构文档进行大量转换。我需要能够更改目标 namespace 、支持类型交叉引用和构建 wsdl基于多个模式文档。
最常用的操作之一是在将模式导入 wsdl 文件之前更改 namespace 前缀。我正在使用 org.xml.sax.ContentHandler它是 startPrefixMapping处理命名空间的方法。除非我想更改元素类型,否则一切正常且完美。
这是简单的架构片段
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="Param">
<sequence>
<element name="key" type="string"/>
<element name="value" type="string"/>
</sequence>
</complexType>
<!-- omitted -->
必须按如下方式放在 wsdl 中:
<definitions xmlns:xs="http://www.w3.org/2001/XMLSchema">
<types>
<xs:schema>
<xs:complexType name="Param">
<xs:sequence>
<xs:element name="key" type="xs:string"/> <!-- 'xs:' to be added -->
<xs:element name="value" type="xs:string"/> <!-- 'xs:' to be added -->
</xs:sequence>
</xs:complexType>
<!-- omitted -->
问题是某些模式的属性值(type 在 <element> 中,base 在 <extension> 中)是命名空间感知的,并且在上面的示例中可能会发生变化。如我所见,DOM 和 SAX 解析器都无法处理这种情况,因此我目前正在使用难看的字符串操作从特定属性值中检索命名空间信息。
我错过了什么吗?是否有任何 API、库或其他特定于架构的工具来处理此类任务?
最佳答案
是的,这是 xml 模式/wsdl 中的一个主要错误。在属性值中使用 xml 命名空间前缀是一个巨大的错误(因为前缀值本身并不重要,只是实际命名空间的占位符)。不幸的是,我不知道该问题有什么好的解决方案(我不得不实现几乎相同类型的想法:将多个用户定义的模式合并到一个模式/wsdl 中)。我知道 xerces 有一个 xml schema model api ,但我不知道它是否支持将多个模式合并在一起并生成结果输出。
关于java - XML 架构。处理命名空间感知属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877684/
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我希望我的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
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use