#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>