Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当外部供应商添加违反XSD的属性时该怎么办_Java_Xml_Parsing_Xsd - Fatal编程技术网

Java 当外部供应商添加违反XSD的属性时该怎么办

Java 当外部供应商添加违反XSD的属性时该怎么办,java,xml,parsing,xsd,Java,Xml,Parsing,Xsd,我们在针对特定XSD解析外部XML时遇到了一个问题。我们有不断变化的外部供应商XML提要(它们向XML添加了更多属性,这些属性在XSD中没有定义),破坏了我们的代码。当外部供应商添加更多属性时,我们需要确定避免问题的方法。我们不知道他们什么时候会添加新字段。 我们还需要我们的XSD来验证属性。如有任何建议,将不胜感激 理想情况下,您应该要求您的供应商提供针对您的XSD进行验证的XML,并且他们应该在需要时正式请求添加到XSD中。毕竟,XSD的目的是管理此类协议 如果你不能使这项工作>,并且愿意

我们在针对特定XSD解析外部XML时遇到了一个问题。我们有不断变化的外部供应商XML提要(它们向XML添加了更多属性,这些属性在XSD中没有定义),破坏了我们的代码。当外部供应商添加更多属性时,我们需要确定避免问题的方法。我们不知道他们什么时候会添加新字段。
我们还需要我们的XSD来验证属性。如有任何建议,将不胜感激

理想情况下,您应该要求您的供应商提供针对您的XSD进行验证的XML,并且他们应该在需要时正式请求添加到XSD中。毕竟,XSD的目的是管理此类协议

<强>如果你不能使这项工作>,并且愿意牺牲这样一个明确的协议的好处,你可以考虑允许你的供应商似乎不能单独离开的那些元素上的任何属性。XML模式有一个支持这一概念的结构

请注意,您可能希望使用
processContents
lax
值来指示如果存在全局属性声明,则应使用该声明,否则,可能会跳过该声明而不会使整个文档无效

例如:

<xs:complexType name="SomeType">
  <xs:attribute name="a1" type="xs:int" use="required" />
  <xs:anyAttribute processContents="lax" />
</xs:complexType>

这与其说是一个技术问题,不如说是一个商业问题。当餐厅供应劣质食物时,你会怎么做?这取决于你有多饿。在理想的世界里,你抱怨,如果他们不解决问题,你就拒绝付钱。但是如果他们是镇上唯一的食物来源,或者如果你不付钱,你可能别无选择,只能吃他们的东西,不管质量如何


无论您的谈判立场如何,您都需要与他们交谈,并解释他们生产的产品不符合您的要求的原因。

或者教育您的供应商发送有效的XML;或者忘记你的XSD,做一些特别的工作parsing@kjhughes谢谢Gyro,但是如果我们拿走了XSD,那么就没有办法确定传递给我们的xml数据的有效性(根据我们的业务规则)。我们可以解析xml以确认格式良好,但是有没有办法通过解析来确定有效性。请提出建议。谢谢你的意见。我们进行了测试,它似乎正常工作。但是,我们发现,我们需要在所有元素中声明标记,我们希望供应商可能会为这些元素添加额外的属性。此标记的一个声明将允许在xml中传递n个属性,而不会破坏我们的代码。另一方面,若供应商添加了额外的元素,我们需要声明标签。但是,我们只能声明一个标记,一个标记只允许在XML中传递一个附加元素。如果供应商传递了多个子元素,我们的代码将中断,因为我们无法在一个父元素下连续声明多个元素,因为它引发了唯一的粒子属性异常。我们试图找到任何参考资料,但找不到任何好的参考。请建议您是否可以指向有关此主题的好资源。再次感谢您的帮助!是的,您的供应商不能遵守XSD的地方越多,您就必须在XSD周围更自由地散布
xs:any
xs:anyAttributes
。在某个时刻,您可能会完全放弃验证。我最近讨论了一个您可能会感兴趣的“”的问题:只要给定一个特定的根元素,它就允许它上面的任何属性和下面的任何XML。