3

DTD の変更に伴い、いくつかの XML ファイルを変換しています。

変更の 1 つは、処理命令を他の要素の属性に変更することですが、命令から特定の情報を選択するのに問題があります。PI の使用方法についてはあまり見つけることができませんでした - 私が見つけたほとんどすべては、PI の作成方法に関するものです - しかし、私はこれを見つけることができました: http://doccookbook.sourceforge.net/html/en/dbc. common.pi.html

例 - 元の XML:

<?Fm Condition FM8_SYSTEM_HIDEELEMENT Dark%20Grey NO_OVERRIDE hide AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_ADDED Forest%20Green SINGLE_UNDERLINE show AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_DELETED Red STRIKETHROUGH show AsIs?>

<products>
    <?Fm Condstart p-version?>
    <prod>
        <form>inj</form>
        <strength>10, 20, 50</strength>
    </prod>
    <?Fm Condend p-version?>

    <?Fm Condstart e-version?>
    <prod>
        <form>inj</form>
        <strength>10</strength>
        <packsize>0.4&nbsp;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>20</strength>
        <packsize>0.4&nbsp;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>50</strength>
        <packsize>0.4&nbsp;mL (syringe), 4</packsize>
    </prod>
    <?Fm Condend e-version?>
</products>

このXSLテンプレートを試しました

<xsl:template match="processing-instruction()">
    <xsl:choose>
        <xsl:when test="'Condstart'">
            <xsl:text>ELEPHANTS</xsl:text>
        </xsl:when>

        <xsl:otherwise>
            <xsl:copy />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

しかし、選択しようとしているものだけでなく、ドキュメント内のすべての処理命令が「エレファント」に変わります。

4

1 に答える 1

3

次のようなものが必要です。

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

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

 <xsl:template match=
 "processing-instruction()[starts-with(.,'Condstart')]">
  <xsl:text>ELEPHANTS</xsl:text>
 </xsl:template>
</xsl:stylesheet>

提供された (整形式になるように修正された) XML ドキュメントにこの変換を適用すると、次のようになります。

<?Fm Condition FM8_SYSTEM_HIDEELEMENT Dark%20Grey NO_OVERRIDE hide AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_ADDED Forest%20Green SINGLE_UNDERLINE show AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_DELETED Red STRIKETHROUGH show AsIs?>
<products>
    <?Fm Condstart p-version?>
    <prod>
        <form>inj</form>
        <strength>10, 20, 50</strength>
    </prod>
    <?Fm Condend p-version?>
    <?Fm Condstart e-version?>
    <prod>
        <form>inj</form>
        <strength>10</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>20</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>50</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <?Fm Condend e-version?>
</products>

必要な正しい結果が生成されます。

<?Fm Condition FM8_SYSTEM_HIDEELEMENT Dark%20Grey NO_OVERRIDE hide AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_ADDED Forest%20Green SINGLE_UNDERLINE show AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_DELETED Red STRIKETHROUGH show AsIs?>
<products>
    ELEPHANTS
    <prod>
        <form>inj</form>
        <strength>10, 20, 50</strength>
    </prod>
    <?Fm Condend p-version?>
    ELEPHANTS
    <prod>
        <form>inj</form>
        <strength>10</strength>
        <packsize>0.4 mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>20</strength>
        <packsize>0.4 mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>50</strength>
        <packsize>0.4 mL (syringe), 4</packsize>
    </prod>
    <?Fm Condend e-version?>
</products>
于 2013-03-08T04:36:53.303 に答える