草庐IT

xml - JAXB Unmarshalling - 是否可以在不使用模式验证的情况下限制元素的出现?

我是JAXB的新手并且继承了一个项目,该项目使用它来编码/解码xml-已经使用各种JAXB注释编写了自定义验证-目前没有使用模式。我需要在解码时添加一些验证以检查给定元素是否只出现一次-从周围搜索看起来它通常是在xsd中使用“maxOccurs=1”实现的-所以我的问题是这可以使用任何JAXB验证来实现注释?例如(为简单起见的缩短版本)-当前最后一个值“NameThree”被取消编码,但当存在超过1个名称元素时我想要验证错误。@XmlAccessorType(XmlAccessType.FIELD)publicclassPerson{@XmlElement(name="NAME",re

java - 如何将 generateElementProperty 设置为绑定(bind)文件中的本地属性

我遇到了jaxb的问题。我的要素之一是要求我设置JAXBElement,而不仅仅是String.我知道解决此问题的方法是更改​​xsd,如此处所述JAXBgeneratingJAXBElementinsteadofString,但xsd是由供应商提供的,我们无法说服他们更改它。显然,另一种解决方案是指定属性,这将关闭JAXBElements全局范围内,这也不是我们想要的。根据thispage,应该可以设置generateElementProperty="false"在本地定制。我怎样才能在绑定(bind)文件中做到这一点?我能找到的唯一示例(如this)似乎是直接在xsd中设置它——如

xml - JAXB - 解码时的 XSD 验证不会因缺少属性而失败

我在解码方法和属性验证方面遇到问题。我的XSD中有一个设置为“固定”的属性,当我尝试解码不包含此固定属性的XML时,没有出现错误。对我来说,XML无效,因为该属性不存在并且应该引发异常。这是我的XSD:这是我尝试解码的XML:truehello这是我解码的方法:try{JAXBContextcontext=JAXBContext.newInstance("com.test");Unmarshallerunmarshaller=context.createUnmarshaller();Objecto=unmarshaller.unmarshal(newStringReader(messa

java - 如何在 JAXB 中自定义属性名称?

我正在使用JAXB生成基于某些XSD模式的java类。对于一个元素,例如:jaxb生成以下代码:@XmlElement(name="REC_LOC",required=true)protectedStringrecloc;publicStringgetRECLOC(){returnrecloc;}/***Setsthevalueofthereclocproperty.**@paramvalue*allowedobjectis*{@linkString}**/publicvoidsetRECLOC(Stringvalue){this.recloc=value;}问题是我们需要使用一些专有

c# - 如何将 XML 注释合并回 .cs 文件?

从C#类文件中提取注释相对容易(参见ExtractingdoccommentsfromC#sourcefile),但我最近遇到了相反的问题。我的项目有一堆从XML模式(通过Microsoft的xsd.exe)生成的类。我想写出关于这些类的XML文档,但我们不得不经常重新创建它们。我希望能够写出注释,将它们提取到它们自己的.xml文件中,运行xsd.exe以从架构中重新创建类,然后将注释合并回去。有什么办法可以做到这一点吗? 最佳答案 我查看了v8.1A版SDK的xsd.exe(它是用.NET编写的,因此您可以使用JustDecomp

xml - XML 模式中的数字 ID 类型

我需要使用XML模式定义具有给定模式的ID类型。我到目前为止是这样的:除了例如00123_45678不验证。显然,基本类型xs:ID要求其值是XML非限定名称(xs:NCName)。特别是,ID不能以数字开头。是否有另一种方法可以使用允许数字第一个字符的XML架构来定义文档范围的标识符? 最佳答案 从xsd:string或xsd:token或xsd:NMTOKEN派生您的类型,而不是ID。xsd:ID类型强制执行XML名称规则,因此要求值以名称开始字符开头。通过向适当的祖先元素添加xs:unique声明来恢复唯一性约束。

java - 没有命名空间的 XML。针对多个 XSD 之一进行验证

我经常收到一堆XML文件。我们无法控制它们,它们也没有namespace信息,我们真的很想避免更改它们。我们有一个XSD,我们需要使用它来验证XML文件,如果明确编码以应用它,它就可以工作。现在我们想向SAX解析器提示应该针对这个XSD(我们在文件系统上有)验证这个特定的XML方言,但是除了在XML文件中提供我们真正想要的noNamespaceSchemaLocation之外我找不到任何其他方法喜欢避免。建议?EntityResolver是否总是使用null/空命名空间调用?(一个功能性的解决方案会在我被允许的情况下给予500个奖励积分) 最佳答案

java - 使用带有 xml.xsd 导入 : "Failed to read schema document ' xml. xsd 的 XJC 时出错”

我正在尝试在第三方的模式文件(它是Amazon.com的产品API)上运行xjc。好吧,我遇到了麻烦,因为对于其中一个文件default.xsd,xjc对以下导入感到厌烦(它是模式声明之后的第一个导入):我不是XML方面的专家,但我认为xml.xsd是“核心”XML/XSD库的一部分,并且XJC默认情况下会知道该库的详细信息。但是当我运行任务时,我得到了这个错误:[WARNING]schema_reference.4:Failedtoreadschemadocument'xml.xsd',because1)couldnotfindthedocument;2)thedocumentcou

xml - 以编程方式将 XSD 1.1 架构转换为 XSD 1.0?

如何通过剥离所有1.1功能并仅保留与XSD1.0兼容的子集,将XSD1.1模式自动转换为XSD1.0模式?我意识到这会限制您可以利用多少XSD1.1功能,但我想象的用例是一个模式,您可以在其中发布XSD1.1版本和更兼容的XSD1.0版本,两者都描述相同的数据结构,但1.1版本有一些额外的数据完整性检查。 最佳答案 如果您正在设想同时发布1.1模式和相关的1.0模式,那么最简单和最好的方法可能是使用XSD1.1规范中描述的vc:命名空间。您可以使用vc:命名空间来标记1.1功能,例如您提到的断言(或包含它们的声明),并提供1.0等价

xml - 有没有办法在 schematron 中传递变量?

我想使用一个变量来表示我的schematron断言并在我的验证消息中使用它。例如:User:'----'doesn'texistasabusinessowner.'----'是用户的名称。有没有办法在schematron中使用变量? 最佳答案 您可以使用value-of来检索变量或XPath的值:User:doesn'texistasabusinessowner.如果你想引入一个变量,使用let:User:doesn'texistasabusinessowner. 关于xml-有没有办法