Автор: AngelGavin Источник: CSDN
Как загрузить документы с иностранными и специальными символами?
Документы могут содержать иностранные символы, например:
иностранные символы (úóí?)
Например, иностранным символам, таким как 粲, должна предшествовать escape-последовательность. Иностранные символы могут быть закодированы UTF-8 или указаны с другой кодировкой, как показано ниже:
иностранные символы (?磲)
XML теперь загружен правильно.
Другие символы зарезервированы в XML, и их необходимо обрабатывать по-другому. XML ниже:
Это и то
Возникает следующая ошибка:
Здесь недопустимы пробелы.
Строка 0000001: То и это.
Местоположение 0000012: ----------^
Здесь & является частью синтаксической структуры XML. Если он просто помещен в источник данных XML, его нельзя интерпретировать как &. Вам необходимо заменить специальные последовательности символов, называемые «сущностями».
Это и то
Следующие символы требуют соответствующих объектов:
< <
& &
>>
" "
'&апос;
Символ кавычки используется в качестве разделителя значений атрибутов в разметке и поэтому обычно не может использоваться внутри значений атрибутов. Например, следующая команда вернет ошибку:
Здесь одинарная кавычка используется как разделитель атрибута, так и внутри самого значения атрибута. Чтобы исправить эту проблему, вы можете изменить разделитель атрибута на двойные кавычки
или избежать одинарных кавычек для сущности.
Оба вышеуказанных метода вернут значение атрибута John's Stuff через метод getAttribute в объектной модели XML. Аналогично для двойных кавычек вы можете использовать объект «.
Вы также можете обрабатывать специальные символы в содержимом элемента, поместив текст в раздел CDATA. Верно следующее:
в этом примере объектная модель XML отображает узел CDATA как дочерний узел узла xml, который возвращает строку
This & that представляет собой просто «текстовое» содержимое.
как значение узла.
Как использовать COM-компонент MSXML в Visual Studio 6.0 C++?
Самый простой способ использовать COM-
компоненты MSXML в Visual C++ 6.0 — использовать директиву #import:
Он определяет все интерфейсы IXML* и идентификаторы интерфейсов, чтобы их можно было использовать в приложениях. Библиотека типов MSXML и файлы заголовков (на английском языке) также доступны в INETSDK, а также в uuid.lib, содержащем IID классов.
Как использовать объекты HTML в XML?
Следующий XML содержит объекты HTML:
Авторское право ? 2000, Microsoft Inc. Все права защищены.
Выдает следующую ошибку:
Ссылка на неопределенную сущность «копия».
Строка: 1, позиция: 23, код ошибки: 0xC00CE002.
Авторское право 2000, ...
-----------------------^
Это связано с тем, что XML имеет только пять встроенных сущностей. Дополнительные сведения о встроенных сущностях см. в разделе Как загрузить документы с иностранными и специальными символами? .
Чтобы использовать объекты HTML, вам необходимо определить их с помощью DTD. Дополнительную информацию о DTD см. в рекомендациях W3C XML (на английском языке). Чтобы использовать этот DTD, включите его непосредственно в тег DOCTYPE следующим образом:
Авторское право ? 2000, Microsoft Inc. Все права защищены.
Чтобы загрузить его, вам необходимо отключить атрибут validateOnParse интерфейса IXMLDOMDocument. Попробуйте вставить его на тестовую страницу валидатора, отключите проверку DTD и нажмите «Проверить». Обратите внимание, что документ загружается, и символы авторского права появляются в дереве DOM в конце страницы валидатора.
Если проверка DTD завершена, объекты HTML, являющиеся объектами параметров, должны быть включены в существующее DTD следующим образом:
%HTMLENT;
%HTMLENT;
Он определит все объекты HTML, чтобы их можно было использовать в документах XML.
Как бороться с пробелами в содержимом элемента?
XML DOM имеет три способа доступа к текстовому содержимому элементов:
Поведение атрибута
nodeValue Возвращает исходное текстовое содержимое (включая символы пробелов) в узлах TEXT, CDATA, COMMENT и PI, как указано в исходном источнике XML. Для узлов ELEMENT и самого DOCUMENT возвращается ноль.
Данные То же, что и nodeValue
. Повтор текста объединяет несколько узлов TEXT и CDATA в указанном поддереве и возвращает объединенный результат.
Примечание. Пробелы включают новые строки, табуляции и пробелы.
Свойство nodeValue обычно возвращает содержимое исходного документа, независимо от того, как документ был загружен и текущей области действия xml:space.
Атрибут text объединяет весь текст в указанном поддереве и расширяет сущность. Это связано с тем, как загружается документ, текущим состоянием переключателя saveWhiteSpace и текущей областью действия xml:space, см. ниже:
saveWhiteSpace = true, когда документ загружен.
saveWhiteSpace=true | saveWhiteSpace=true | saveWhiteSpace=false | saveWhiteSpace=false |
xml:space=preserve | xml:space=default | xml:space=preserve | xml:space=default |
сохранить | сохранить | сохранить | сохранить и обрезать |
saveWhiteSpace = false при загрузке документа
saveWhiteSpace=true | saveWhiteSpace=true | saveWhiteSpace=false saveWhiteSpace= | false |
xml:space=preserve | xml:space=default | xml:space=preserve | xml:space=default |
полусохранить | полусохранить и усечь | полусохранить | полусохранить и усечь |
сохранить здесь означает и Точно такое же исходное текстовое содержимое в исходном XML-документе, усеченное значение, означающее, что начальные и конечные пробелы были удалены, полусохранено, что означает «значительные пробельные символы», сохраняются, а «неважные пробельные символы» нормализуются. Важные пробельные символы — это пробелы в текстовом содержимом. Неважные пробелы — это пробелы между токенами. Они выглядят следующим образом:
n
tДжейнn
tСмит n
В этом примере красный — это неважный символ пробела, который можно игнорировать, а зеленый — важный символ пробела, поскольку он является частью текстового содержимого и, следовательно, имеет важное значение, которое нельзя игнорировать. Итак, в этом примере свойство text возвращает следующее:
Возвращаемое значение статуса остается «nt JanentSmith n»
Сохраните и обрежьте «ДжейнntСмит»
Полузарезервированный "Джейн Смит"
Половинное сохранение и усечение «Джейн Смит».
Обратите внимание, что «полусохранение» нормализует неважные пробельные символы, например, символы новой строки и табуляции будут уменьшены до одного пробела. Если вы измените атрибут xml:space и переключатель saveWhiteSpace, свойства текста будут возвращать соответственно разные значения.
CDATA и xml:space="preserve" границы поддерева
В следующем примере содержимое узлов CDATA или «зарезервированных» узлов будет объединено, поскольку они не участвуют в нормализации неважных пробельных символов. Например:
п
t Джейн n
t Смит ]>n
В этом случае символы пробелов внутри узла CDATA больше не «объединяются» с «неважными» символами пробелов и не усекаются. Таким образом, случай «наполовину сохраненный и усеченный» вернет следующее:
«Джейн Смит»
Здесь будут включены неважные пробельные символы между тегами и независимо от содержимого узла CDATA. Если вы замените CDATA на следующее, будет возвращен тот же результат:
Смит
Сущности — это специальные
сущности, которые загружаются и анализируются как часть DTD и отображаются в узле DOCTYPE. Им не обязательно иметь область действия xml:space. Например:
Джейнn
тп
">
]>
&Джейн;
Если предположить, что saveWhiteSpace=false (в области тега DOCTYPE), неважные символы пробелов теряются при анализе сущностей. У объектов не будет узлов с пробелами. Дерево будет выглядеть так:
ДОКТИП foo
СУЩНОСТЬ: Джейн
ЭЛЕМЕНТ: сотрудник
ЭЛЕМЕНТ: имя
ТЕКСТ: Джейн
ЭЛЕМЕНТ: заголовок
ТЕКСТ>:Инженер-разработчик программного обеспечения
ЭЛЕМЕНТ: фу
АТРИБУТ: xml:space="preserve"
ENTITYREF: Джейн
Обратите внимание, что дерево DOM, представленное в узле ENTITY внутри DOCTYPE, не содержит узлов WHITESPACE. Это означает, что дочерние узлы узла ENTITYREF также не имеют узлов WHITESPACE, даже если ссылка на сущность находится в области действия xml:space="preserve".
Каждый экземпляр ENTITY, на который ссылается данный документ, обычно имеет одно и то же дерево.
Если сущность должна абсолютно сохранять пробельные символы, то она должна указать собственный внутренний атрибут xml:space или для переключателя saveWhiteSpace документа должно быть установлено значение true.
Как бороться с пробелами в атрибутах?
Существует несколько способов доступа к значениям свойств. Интерфейс IXMLDOMAttribute имеет атрибут nodeValue, который эквивалентен атрибутам nodeValue и text как расширению Microsoft. Эти свойства возвращают: Текст, возвращаемый свойством.
attrNode.nodeValue
attrNode.value
getAttribute("name") возвращает точно такое же содержимое (и расширенные объекты), что и в исходном документе.
attrNode.nodeTypedValue Нуль
attrNode.text аналогичен nodeValue, за исключением того, что начальные и конечные пробельные символы были усечены.
Спецификация «Язык XML» определяет следующее поведение для приложений XML: Типы атрибутов Возвращаемый текст CDATA ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, перечисление Полунормализация
Полная нормализация
Здесь полунормализация представляет собой преобразование новых строк и символов табуляции. является пространством, но несколько пространств не вырождаются в одно пространство.