Как вставить символы «больше» и «меньше» в файл XML, измененный WiX во время установки? - PullRequest
2 голосов
/ 09 августа 2010

Я использую WiX для создания базы данных установки Windows для своего приложения.У меня есть файл XML, который устанавливается вместе с моим приложением, который должен быть заполнен информацией, полученной во время установки.Теги WiXUtilExtension util: XmlFile и util: XmlConfig в принципе являются отличными способами сделать это, но они не совсем решают мою проблему.В частности, мне нужно вставить некоторый javascript:

<?js
    //some javascript that must include formatted string properties
    //so that [PropertyName] evaluates to its value during installation
?>

, но с этим текстом в качестве значения атрибута util: XmlFile / @ Value он не скомпилируется (неудивительно - ошибка CNDL0104).И ни обратная косая черта, ни [\] (escape-последовательность для квадратных скобок), по-видимому, не экранируют символы больше или меньше.

Я также попытался поместить вставленный текст во внутренний текст элемента util: XmlConfig, но при наличии тега Javascript он просто игнорирует текст.Обтекание внутреннего текста в тегах CDATA вставляет текст, но заменяет символы «больше» и «меньше» их сущностями «& gt;»и "& lt;", без кавычек и пробелов.

В чем прикол?

РЕДАКТИРОВАТЬ: Все еще борется с этой проблемой, но некоторые дополнительные детали могут помочь прояснить дальнейшие.Вот пример XML-файла со структурой, которую мне нужно изменить при установке.

<?xml version="1.0"?>
<RootElement>
    <SubElement>
        <?js
            //insert Javascript here with formatted property values e.g. [PropertyName]
        ?>
    </SubElement>
</RootElement>

В моем коде WiX я имел:

<util:XmlConfig Id="EditXml" File="foo.xml" Action="create" Node="value" On="install" ElementPath="//RootElement/SubElement" Sequence="1" >
    <![CDATA[//the Javascript code]]>
</util:XmlConfig>

, который, конечно, поместилтекст рядом с инструкцией по обработке Javascript, а не внутри нее.Поэтому я изучил теги инструкций обработки XML с помощью XPath , полагая, что, возможно, я не использовал правильное значение для атрибута util: XmlConfig / @ ElementPath.Я никогда раньше не использовал XPath, но думал, что сработает одно из следующих изменений:

ElementPath="//RootElement/SubElement/processing-instruction('js')"
ElementPath="processing-instruction('js')//RootElement/SubElement"
ElementPath="//processing-instruction('js')"
ElementPath="processing-instruction('js')"

, но безрезультатно.Я просто не согласен с этим синтаксисом, или есть другое решение?

Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 09 августа 2010

У меня нет инструментов, чтобы убедиться, что это работает, но я бы попробовал заменить их их сущностями (&gt; и &lt;), но не заключать их в блок CDATA. По сути, сущности являются «escape-последовательностью» для необработанного XML.

...