3

XSLTを使用して構成変換を適用しています。要素が存在しない場合は追加し、存在する場合は上書きしたい。

望ましい結果:

<foo>
    <bar value="baz" />        
</foo>

両方の入力に対してこの出力を取得するために使用できるテンプレート

<foo>
    <bar value="123" />        
</foo>

<foo>
</foo>
4

2 に答える 2

2

この変換

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="foo/bar/@value[.='123']">
  <xsl:attribute name="value">baz</xsl:attribute>
 </xsl:template>

 <xsl:template match="foo[not(bar)]">
  <foo>
    <bar value="baz"/>
  </foo>
 </xsl:template>
</xsl:stylesheet>

最初に提供されたXMLドキュメントに適用された場合

<foo>
    <bar value="123" />
</foo>

必要な正しい結果を生成します

<foo>
   <bar value="baz"/>
</foo>

2番目に提供されたXMLドキュメントに適用した場合:

<foo>
</foo>

また、同じ正しい結果が生成されます

説明: IDルールの適切な使用とオーバーライド。

于 2012-04-26T12:21:50.777 に答える
1

.NETを使用していますか?もしそうなら、あなたはこれらの構成変換のために特別に作られた何かを考えることができます。MSの従業員であるSayedIbrahimHashimは、すべてのVSプロジェクトのWeb構成変換であるSlowCheetahを作成しました。

次に、2つのシナリオは次のようになります。

<foo>
  <bar xdt:Transform="Replace" value="123" />
</foo>

<foo xdt:Transform="Replace">
</foo>

Xsltは少し冗長なIMOです。ハンスレマンには投稿があります

さまざまな変換に関するドキュメントは、http://go.microsoft.com/fwlink/?LinkId=214134にあります。

SlowCheetah拡張機能は、プロジェクトにコピーして自己完結型にすることができるターゲットを追加します

Codeplexには、exeとして使用したり、 TransformConfigと呼ばれるコードで実行したりする場合の簡単なプロジェクトもあります。

PS。Tom van Orbit One hier;)

于 2012-04-27T08:10:01.037 に答える