фонсимвол @ вокруг атомного атрибута в XML-файле
Хотя, глядя в один из конфигурационных файлов нашей системы, я обнаружил, что ниже в файле XML конфигурации:
<crn:parameter name="serverLocale" @[email protected]>
<crn:value xsi:type="xsd:language">en</crn:value>
</crn:parameter>
@[email protected]
выглядит недействителен мне ; Раньше я никогда не видел ничего подобного в XML. Мое предположение - это недопустимый XML, но используется некоторым предварительным процессором, используемым системой до разбора XML (или, возможно, специализированным парсером XML, предназначенным для обработки этого).
Я обнаружил эту проблему, так как я сбил скрипт, чтобы запрашивать значения в файлах конфигурации на разных серверах (сохраняет журнал в каждом из них), в котором сообщается о проблеме. Это подтверждает мое предположение о том, что вышеупомянутое является недопустимым XML, но, возможно, это просто нишевая функция, не реализованная MS?
$servers | %{
$val = select-xml -path ("\\{0}\share\folder\config.xml" -f $_) -xpath "//*[local-name()='parameter'][@name='caf_enabled']/*[local-name='value']/text()"
write-host ("server: '{0}' :: value: '{1}'" -f $_,$val)
}
NB: система представляет собой инструмент отчетности IBM Cognos.
Вопросы
- Является ли это действительный XML:
<crn:parameter name="serverLocale" @[email protected]>
? - Есть ли простой способ разрешить PowerShell читать этот XML; возможно, используя другой синтаксический анализатор или лишив недействительные данные?
Update
Я создал следующий PowerShell раздеться недопустимые части до запрашивая ...
$xml = [xml]((get-content ("\\server\share\folder\config.xml")) -replace "@\S*@", "")
$val = select-xml -xpath "//*[local-name()='parameter'][@name='caf_enabled']/*[local-name='value']/text()" -xml $xml
write-host ("server: '{0}' :: value: '{1}'" -f $_,$val)
Однако это дает следующее сообщение об ошибке:
Cannot convert value "System.Object[]" to type "System.Xml.XmlDocument".
Error: "Unexpected XML declaration.
The XML declaration must be the first node in the document, and no white space
characters are allowed to appear before it.
NB: в объявлении XML нет пробелов, комментариев или любых других символов до этого (b перед или после замены)