#xml
#xml
Вопрос:
Допустим, у меня есть фрагмент XML, который выглядит следующим образом:
<row Johnsonamp;amp;Johnson="good" Mamp;amp;Ms ="bad" /> --self closing tag
или
<row Johnsonamp;amp;Johnson="good" Mamp;amp;Ms ="bad" </row>
Я избежал символа amp; в значении имени атрибута, но, похоже, это все еще незаконно. Могут ли у вас быть значения ИМЕН атрибутов с экранированными недопустимыми символами? Если да, то как?
Комментарии:
1. Это не часть XML. Таким образом, вы не можете использовать какую-либо технологию, предназначенную для обработки XML; вам нужно будет использовать необработанную обработку текста, чтобы преобразовать этот материал в XML, прежде чем вы сможете сделать с ним что-либо полезное. Однако, вместо восстановления данных, более важно восстановить процесс, который их генерирует.
Ответ №1:
amp;, 0x26, не допускается в именах XML:
Раздел 2.3, «Распространенные синтаксические конструкции»
[4]NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a]NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
Ответ №2:
Нет, вы не можете использовать амперсанд в имени любого вида. В результате у вас вообще нет XML. Вы только что получили некоторый текст, который не соответствует правильно сформированному XML.
Рассмотрите возможность использования чего-то более похожего на следующее в качестве альтернативы:
<products>
<product name="Johnsonamp;amp;Johnson" quality="good"/>
<product name="Mamp;amp;Ms" quality="bad" />
</products>
Комментарии:
1. Вы не ответили на мой вопрос? Можете ли вы иметь имена атрибутов с недопустимыми символами или нет? Все, что вы сделали, это изменили мой пример xml, если я уберу eh amp; amp; это было бы полностью корректно, так к чему вы клоните
2. @Mike: извините, думал, я ясно выразился. Нет, у вас не может быть амперсандов в имени любого вида. XML, который я опубликовал, был примером законного способа хранения одних и тех же данных.