2016-11-15 97 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本身,您的“必须转换”信号必须定义在XML之外;现在你需要一些方法来指出。您可以写下一组XPATH表达式来“指向”需要转换的节点;这是脆弱的,因为转换可以围绕XML子树移动,并且XPATH可能会失效,除非它们也被调整了,这很尴尬。

相关问题