Добавить поле use = "required" в XML Атрибут схемы программно - PullRequest
0 голосов
/ 02 апреля 2020

Родительский 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" Как программно обновлять и добавлять элементы в XSD

Любая помощь здесь очень ценится. Спасибо

1 Ответ

2 голосов
/ 02 апреля 2020

Используйте 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, но, конечно, вы можете легко запустить XSLT-преобразование из Java, и это намного проще, чем ручное кодирование с низкоуровневой манипуляцией DOM).

...