16

私はこのようなXMLを持っています

<?xml version="1.0" encoding="UTF-8"?>
<OMDefault xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <PrintDollarsAndCents>X</PrintDollarsAndCents>
   <MailAddrLine1>Add1</MailAddrLine1>
   <MailAddrLine2>Add2</MailAddrLine2>
</OMDefault>

XMLをこれに変換するXSLTが欲しい

<?xml version="1.0" encoding="UTF-8"?>
<OMDefault xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <PrintDollarsAndCents>Y</PrintDollarsAndCents>
   <MailAddrLine1>Add1</MailAddrLine1>
   <MailAddrLine2>Add2</MailAddrLine2>
 </OMDefault>

属性が PrintDollarsAndCents で、その値が「X」の場合、「X」が「Y」に変換されることに注意してください。私はこの XSLT のことは初めてなので。

前もって感謝します。

4

1 に答える 1

26

基本的に、オーバーライド ルールを使用して恒等変換が必要です。

次の変換

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

    <xsl:template match="PrintDollarsAndCents/text()[.='X']">Y</xsl:template>

</xsl:stylesheet>

入力に適用すると、結果が生成されます。

<OMDefault xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <PrintDollarsAndCents>Y</PrintDollarsAndCents>
   <MailAddrLine1>Add1</MailAddrLine1>
   <MailAddrLine2>Add2</MailAddrLine2>
</OMDefault>

最初のテンプレートは恒等変換で、入力ドキュメントを正確にコピーします。

X2 番目のテンプレートは、テンプレートの子である値を持つテキスト ノードをオーバーライドしますPrintDollarsAndCentsY実際のコンテンツではなく値を発行することに注意してください。

于 2013-07-10T00:48:22.697 に答える