java - 以编程方式将 use="required" 字段添加到 XML Schema 属性
问题描述
父 xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SpecialOption">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Option" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
修改 xsd 后:添加 use="required" 字段
<xs:element name="SpecialOption">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Option" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
我想将 use="required" 字段添加到父 xsd 并生成一个新的 xsd 文件。我想从 java 代码中以编程方式执行此操作。
目前,我正在按照以下方法读取 xsd 文件,但无法找到添加 use="required" 属性的方法 How to Programmatically Update and Add Elements to an XSD
非常感谢这里的任何帮助。谢谢
解决方案
使用 XSLT。假设 XSLT 3.0:
<xsl:transform version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="xs:element[@name='SpecialOption']//xs:attribute[@name='Option']">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:attribute name="use">required</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:transform>
使用早期版本的 XSLT 并不难,只是有点冗长。
(您要求使用 Java,但您当然可以轻松地从 Java 运行 XSLT 转换,这比使用低级 DOM 操作手动编码要容易得多)。
推荐阅读
- android - DatabaseException:无法将 java.lang.String 类型的对象转换为 com.mscit_lab_16.school_management.Message 类型
- r - 大型数据集的分类分析
- machine-learning - 尺寸的点积误差
- python - 如何在 Python 中获取特定程序的当前 CPU、GPU 和 RAM 使用情况?
- graph-theory - 在无向图中找到欧拉回路
- javascript - 在正则表达式匹配后获取某个字符
- javascript - 节点:当继承 EventEmitter 的现有子类时,如何拦截来自超类的事件?
- mysql - 无法在数据库中插入带有 (') 的数据,例如:未插入 Loop'D
- django - 我怎样才能使模型在 Django 中独一无二
- apache-spark - 为什么要使用 where 条件计算查询需要对数据进行改组?