0

データベース xml 文字列から取得します。

また :

<?xml version="1.0" ?>
<Parameters>
  <StringParameter name="field">TNA</StringParameter>
  <DateParameter name="date">2011-12-14T00:00:00</DateParameter>
</Parameters>

また :

<?xml version="1.0" ?>
<ArrayOfPrimitiveParameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PrimitiveParameter>
    <Name>field</Name>
    <Value xsi:type="xsd:string">TNA</Value>
  </PrimitiveParameter>
  <PrimitiveParameter>
    <Name>date</Name>
    <Value xsi:type="xsd:dateTime">2011-12-14T00:00:00</Value>
  </PrimitiveParameter>
</ArrayOfPrimitiveParameter>

2 番目のケースでのみ出力を変換したい。しかし、私の xslt スタイルシートはすべてのケース (1 と 2) を変換します。今日、SQL Where フィルターを使用して回避策を作成しましたが、XSL でこれを行う方法を知りたいです。

ここに私の XsltStyleSheet があります:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xsd xsi" 
>
  <xsl:output method="xml" omit-xml-declaration="yes" standalone="yes"  />
  <xsl:template match="ArrayOfPrimitiveParameter" >

    <Parameters>
      <xsl:apply-templates />
    </Parameters>
  </xsl:template>

  <xsl:template match="PrimitiveParameter">

    <!-- String -->
    <xsl:if test="Value/@xsi:type='xsd:string'">
     <xsl:element name="StringParameter">
       <xsl:attribute name="name">
          <xsl:value-of select="Name" />
        </xsl:attribute>

        <xsl:if test="Key">
          <xsl:attribute name="DomainKey">
            <xsl:value-of select="Key" />
          </xsl:attribute>
        </xsl:if>
        <xsl:value-of select="Value" />
      </xsl:element>
    </xsl:if>

    <!-- DateTime -->
    <xsl:if test="Value/@xsi:type='xsd:dateTime'">
      <xsl:element name="DateParameter">
        <xsl:attribute name="name">
          <xsl:value-of select="Name" />
        </xsl:attribute>
        <xsl:value-of select="Value" />
      </xsl:element>
    </xsl:if>

    <!-- Boolean -->
    <xsl:if test="Value/@xsi:type='xsd:boolean'">
      <xsl:element name="BoolParameter">
        <xsl:attribute name="name">
          <xsl:value-of select="Name" />
        </xsl:attribute>
        <xsl:value-of select="Value" />
      </xsl:element>
    </xsl:if>

    <!-- Double -->
    <xsl:if test="Value/@xsi:type='xsd:double'">
      <xsl:element name="BoolParameter">
        <xsl:attribute name="name">
          <xsl:value-of select="Name" />
        </xsl:attribute>
        <xsl:value-of select="Value" />
      </xsl:element>
    </xsl:if>

  </xsl:template>
</xsl:stylesheet>

よろしく、

フロリアン

4

2 に答える 2

1

入力ドキュメント内の要素を照合して何もしないことで、その要素を明示的に無視できます。

  <xsl:template match="Parameters"/>

Parametersこれは、デフォルトで要素を出力にコピーするために使用されるような、より一般的な一致をオーバーライドして、一致および抑制します。

より具体的な一致パターンをオーバーライドしないことに注意してください。

  <xsl:template match="Parameters[StringParameter/@name = 'field']">
  ...
  </xsl:template>
于 2013-10-10T11:59:24.960 に答える