2016-11-15 2 views
2

Можно ли пометить узел в XML-файле (например, файл конфигурации) как «должно быть преобразовано», а для того, чтобы преобразование завершилось с ошибкой, если вы не указали его в своем файле преобразования?Можно ли пометить узел XML как «необходимо преобразовать»?

Для примера возьмем следующий составил пример .config файла с узлом, который должен быть преобразован:

<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <!-- Mark this key to be transformed --> 
    <add key="MyValue" MustBeTransformed="true" /> 
    </appSettings> 
    <system.web> 
     <compilation debug="true" targetFramework="4.5.2" /> 
     <httpRuntime targetFramework="4.5.2" /> 
    </system.web> 

</configuration> 

Поскольку значение ключа помечено как MustBeTransformed следующее гарантировало бы, что трансформируются правильно:

<?xml version="1.0" encoding="utf-8"?> 

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 --> 

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <appSettings> 
    <!-- Without the line below, the transform would fail --> 
    <add key="MyValue" xdt:Transform="Set a value" /> 
    </appSettings> 
    <system.web> 
    <compilation xdt:Transform="RemoveAttributes(debug)" /> 
    </system.web> 
</configuration> 

Я спрашиваю это потому, что в данный момент я только видел, что это возможно с помощью .ps1 сценариев и XPath

+0

Что именно вы подразумеваете под «должно быть преобразовано»? Вы имеете в виду «должен быть выбран командой' xsl: apply-templates'? Или вы имеете в виду, что «должно соответствовать правилу шаблона, отличному от встроенного правила шаблона»? Или достаточно ли его выбрать, например, в инструкция 'xsl: for-each' или' xsl: copy-of'? –

+0

Это хороший вопрос. Я хотел бы убедиться, что для любых преобразований, которые имеют место, эти значения предоставляются для каждого из ключей. что атрибут был установлен на узле, было бы хорошим началом, я думаю – Luke

ответ

1

Если вы хотите пометить узел как «должно быть преобразовано», и единственными данными, которые у вас есть около , является дерево дерева XML, тогда вам нужно будет изменить XML с отметкой.

Вы можете сделать это, добавив зарезервированный атрибут MustBeTransformed к узлу или обернув узел в зарезервированный тег .... Вам нужно будет применить свои преобразования, а затем запустите проверку, чтобы увидеть, есть ли какой-либо из этих зарезервированных атрибутов/тегов.

Если вы не хотите отмечать сам XML, ваш «mustbetransformed» сигнал должен по определению находиться вне XML; теперь вам нужно как-то указать. Вы можете записать набор выражений XPATH, чтобы «указать» на узлы, которые нуждаются в преобразовании; это хрупко, потому что преобразования могут перемещаться вокруг поддеревьев XML, и XPATH могут стать недействительными, если они не будут скорректированы, и это неудобно.

Смежные вопросы