2014-10-13 3 views
0

фонсимвол @ вокруг атомного атрибута в 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 перед или после замены)

ответ

3
  • Нет, это недействительно XML.
  • Нет, нет простого способа заставить PowerShell читать его, так как это неверный XML.

Обратите внимание, что «недействительный XML» - это то же самое, что «не XML». Другими словами, это мусор.

Скорее всего, это своего рода токен замены, который требуется для использования некоторым предварительным процессором с помощью действительного атрибута.