- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个像这样的 XML:
<members>
<member>
<name>john</name>
<properties>
<age>20</age>
<address>20</address>
</properties>
</member>
<member>
<name>kayla</name>
<properties>
<gender>female</gender>
<address>20</address>
</properties>
</member>
</members>
这里会有多个成员节点,它们都共享一个 <name>
节点和 properties
节点。然而, properties
中的元素不同,或者 age+address
或gender+address
都是有效的选择。
我尝试编写这样的 XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="members" type="membersType"/>
<xs:complexType name="membersType">
<xs:sequence>
<xs:element type="memberType" name="member" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="memberType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element type="propertiesType" name="properties"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="propertiesType">
<xs:sequence>
<xs:element type="xs:string" name="address"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="propertiesTypeA">
<xs:complexContent>
<xs:extension base="propertiesType">
<xs:sequence>
<xs:element type="xs:string" name="age" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="propertiesTypeB">
<xs:complexContent>
<xs:extension base="propertiesType">
<xs:sequence>
<xs:element type="xs:string" name="gender" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
我希望这里可以有类似多态性的东西,但是当我使用 JAXP 进行验证时,这不起作用。我还尝试使用 group
功能,但有一个相同的 address
2 组中的元素,因此它仍然不可用。
那么,我应该如何设计XSD?
最佳答案
按照您的 XML 架构,您的 XML 需要如下所示:
<members xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<member>
<name>john</name>
<properties xsi:type="propertiesTypeA">
<address>20</address>
<age>20</age>
</properties>
</member>
<member>
<name>kayla</name>
<properties xsi:type="propertiesTypeB">
<address>20</address>
<gender>female</gender>
</properties>
</member>
</members>
注意以下事项:
xsi:type
属性将元素类型覆盖为子类型。在 XML 架构中指定“选择”可能更适合您。您将不再需要子类型。
<xs:complexType name="propertiesType">
<xs:sequence>
<xs:choice>
<xs:element type="xs:string" name="age"/>
<xs:element type="xs:string" name="gender"/>
</xs:choice>
<xs:element type="xs:string" name="address"/>
</xs:sequence>
</xs:complexType>
关于java - XSD 多态性不适用于 JAXP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28090792/
想象一个 xml 文件,它使用 noNamespaceSchemaLocation 引用架构。 我想在解析期间使用某种解析技术(例如用于解析架构包含的 ResourceResolver)动态解析 no
有什么区别吗 DocumentBuilder.parse(InputStream) 和 DocumentBuilder.parse(InputSource) ? 我只能发现对于第一种情况,解析器会从流
Transformer 方法转换的签名是 void transform(Source xmlSource,Result outputTarget)throws TransformerException
我正在尝试从 android(java) 中的 xml 文档中检索一个节点。 XPATH config:Manifest/config:Text[@config:name='site
我有一个像这样的 XML: john 20 20 kayla female 20
在使用 Xerces 验证 XML 文档时,它会尝试访问 w3c.org 中的互联网资源。我的应用程序需要离线/在防火墙后面工作,因此抛出异常。 有解决办法吗? ps。此链接提供了一些见解,但没有解决
我有一个 Tomcat 5.5 Web 应用程序,它使用 Apache Commons-Configuration 库在运行时生成 XML 配置文件。 Commons-Configuration 反过
我想提供有关正在使用的 JAXP 实现以及从哪个 JAR 文件加载它的诊断信息。 实现此目的的一种方法是在例如 DocumentBuilderFactory 的实例中创建,然后检查该类的属性: pri
有人知道在底层 POJO 上运行的标准 javax.xml.transform.Source 和 javax.xml.transform.Result 的实现吗? 换句话说,我想使用 XSLT 将一个
我正在动态生成一个需要在运行时针对架构进行验证的文档。我遇到的问题是文档的结构是正确的,但每个级别的元素顺序不正确。有没有办法告诉转换器按照 xsd 文件指定的顺序写出元素?或者我是否必须解析 xsd
我遇到一种情况,我们想要根据文件系统中放置的 XSD 来验证作为字节流保存在内存中的 XML 文档。我们希望避免在 XML 文件中明确提及文件名,而是告诉 XML 解析器使用一个或多个 XSD 文件的
我有一个引用了 dtd 文件的 xml 文件。 ... 我设法用 JAXP 读取这个文件,但前提是 referenced.dtd 与 xml 文件位于同一文件夹中。否则我会收到无法加载 dtd 文
我想通过 DocumentBuilder 中完成的验证提供我自己的消息,而不是来自 XMLMessages.properties 的消息。 现在我看到一个属性 error-reporter需要设置为扩
javax.xml.soap.MessageFactory是否可以重用? IE。 msgFactory = MessageFactory.newInstance(); 我可以缓存 msgFactory
HTML5 规范中是否存在无法使用 JAXP 等 XML 库创建的元素?一个例子是未在 XML 中定义的命名 HTML 实体。还有其他不兼容的地方吗? 最佳答案 JAXP 显然只适用于格式良好的 XM
我在使用 XSLT 转换的 Java 应用程序下工作。我在其中有很多 document() 调用,所以可能有 java.lang.OutOfMemory 异常(我实际上有),因为在每次调用 docum
我想知道在使用Java API for XML处理时,哪些对象可以被重用(在相同或不同的文档中),JAXP: DocumentBuilderFactory DocumentBuilder XPath
JAXP 和 JAXB 有什么区别? 最佳答案 JAXP(用于 XML 处理的 Java API)是一个相当过时的总称,涵盖了 JavaSE 中的各种低级 XML API,例如 DOM、SAX 和 S
我想读取一个可能很大的 XML 文件。为了内存效率和易于处理,我想使用 StAX 和 DOM 的混合,如所述 here . 我的输入如下所示(它是 OSM ) .
(问题已更新,见下文) 在 Java 7 上,我使用 JAXP 来解析 XML。 令人惊讶的是,在 XML 模式验证期间,内置实现 xerces 发出 http 请求以解决某些问题(该请求失败)。 问
我是一名优秀的程序员,十分优秀!