Список внутри свойств Java XML

#java #xml #properties #dtd

#java #xml #свойства #dtd

Вопрос:

Я хочу сохранить список пар ключ-значение в качестве значений для определенного ключа в файле свойств xml.

Рассмотрим следующий пример:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <entry key="led.color">
       <color key="r">0</color>
       <color key="g">100</color>
       <color key="b">0</color>
    </entry>
</properties>
  

Мой первоначальный подход заключался в извлечении значения led.color в виде строки и преобразовании его в карту. Но извлечение не удалось со следующим исключением:

Вызвано: org.xml.sax.SAXParseException; Номер строки: 22; Номер столбца: 20; Должен быть объявлен тип элемента «color».

Это происходит потому, что цвет не объявлен в DTD и, следовательно, проверка завершается неудачей.

Есть ли какой-либо встроенный способ справиться с такой задачей или способ избежать проверки этого конкретного значения?

Это DTD ссылок:

 <!--
   Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
-->
<!-- DTD for properties -->
<!ELEMENT properties ( comment?, entry* ) >
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA) >
<!ELEMENT entry (#PCDATA) >
<!ATTLIST entry key CDATA #REQUIRED>
  

Комментарии:

1. вы можете создать свой собственный DTD или XSD

2. Знаете ли вы какие-либо ссылки на это?

3. Хм. Google? «как написать DTD»?

4. вы должны использовать xml-схему вместо dtd

5. @BastianSchoettle w3schools.com/xml/xml_dtd_intro.asp

Ответ №1:

ваш новый XML-файл :

  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE properties SYSTEM "properties.dtd">
 <properties>
   <entry key="led.color">
    <color key="r">0</color>
    <color key="g">100</color>
    <color key="b">0</color>
  </entry>
</properties>
  

файл properties.dtd для размещения в том же каталоге

  <?xml encoding="UTF-8"?>

 <!ELEMENT properties (entry)>
 <!ATTLIST properties xmlns CDATA #FIXED ''>

 <!ELEMENT entry (color) >
 <!ATTLIST entry xmlns CDATA #FIXED '' key NMTOKEN #REQUIRED>

 <!ELEMENT color (#PCDATA)>
 <!ATTLIST color xmlns CDATA #FIXED '' key NMTOKEN #REQUIRED>