0

まず、私はXslの完全な初心者だと言ってみましょう。とてもシンプルだと思うことを成し遂げようとしていますが、構文を理解するのに苦労しています。

場所の名前を取得する変数があります(例:シカゴまたはオーランド)

次に、市外局番なしで電話番号を取得する変数があります。

だから私がやろうとしているのは、場所がシカゴ(773)かオーランド(708)かを基にしたConcat(「電話番号」を含む「市外局番」)のIfステートメントです。

変数:

xsl:variable name="haswph"       select="string-length(workphone) > 0"
xsl:variable name="hasonum"      select="string-length(officenumber) > 0"

出力:

  <xsl:if test="$haswph">
    <li id="PhoneField">
      <xsl:apply-templates select="hithighlightedproperties/workphone" />
    </li>
  </xsl:if>
  <xsl:if test="$hasonum">
    <li id="OfficeField">
      <xsl:apply-templates select="hithighlightedproperties/officenumber" />
    </li>
  </xsl:if>

任意の提案、または正しい方向へのポイントをいただければ幸いです。

ありがとう、ブランドン

<preferredname>Nigro, Brandon L.</preferredname> 
<yomidisplayname></yomidisplayname>
<department>Information Technology</department> 
<workphone>555-5555</workphone>
<officenumber>John Academic Center</officenumber>
4

1 に答える 1

0

質問を正しく理解できれば、このテンプレートを現在の xsl に追加するだけで解決します。

<xsl:template match="workphone">
    <xsl:if test="$office='Chicago'">(773) </xsl:if>
    <xsl:if test="$office='Orland'">(708) </xsl:if>
    <xsl:value-of select="."/>
</xsl:template>

この「$office」変数を元の投稿で参照した変数に置き換えます。

編集: ここでは、前のテンプレートがサンプルの入力 XML に適用される完全な変換があります (ところで: Jim Garrison の提案に従ってみてください。将来の投稿でそれらの一部ではなく完全な入力/出力 XML を投稿すると、正確な応答が得られます。最初の試みで)。

入力:

    <Office code="Chicago">
        <Employee id="1">
            <hithighlightedproperties>
                <preferredname>Nigro, Brandon L.</preferredname>
                <yomidisplayname></yomidisplayname>
                <department>Information Technology</department>
                <workphone>555-5555</workphone>
                <officenumber>John Academic Center</officenumber>
            </hithighlightedproperties>
        </Employee>
    </Office>

XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>
    <xsl:variable name="office" select="Office/@code"/>
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <xsl:template match="Office">
        <html>
            <body>
                <xsl:apply-templates select="Employee"/>
            </body>
        </html>
    </xsl:template>
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <xsl:template match="Employee">
        <xsl:variable name="haswph" select="string-length(hithighlightedproperties/workphone) &gt; 0"/>
        <xsl:variable name="hasonum" select="string-length(hithighlightedproperties/officenumber)&gt; 0"/>
        <p>Employee <xsl:value-of select="@id"/> Properties</p>
        <ul>
            <li id="Name"><xsl:value-of select="hithighlightedproperties/preferredname"/></li>
            <xsl:if test="string-length(hithighlightedproperties/yomidisplayname)">
                <li id="DisplayNameField">
                    <xsl:apply-templates select="hithighlightedproperties/yomidisplayname"/>
                </li>
            </xsl:if>
            <li id="DepartmentField"><xsl:value-of select="hithighlightedproperties/department"/></li>
            <xsl:if test="$haswph">
                <li id="PhoneField">
                    <xsl:apply-templates select="hithighlightedproperties/workphone"/>
                </li>
            </xsl:if>
            <xsl:if test="$hasonum">
                <li id="OfficeField">
                    <xsl:apply-templates select="hithighlightedproperties/officenumber"/>
                </li>
            </xsl:if>
        </ul>
    </xsl:template>
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <xsl:template match="workphone">
        <xsl:if test="$office='Chicago'">(773) </xsl:if>
        <xsl:if test="$office='Orland'">(708) </xsl:if>
        <xsl:value-of select="."/>
    </xsl:template>
</xsl:stylesheet>

出力:

<html>
    <body>
        <p>Employee 1 Properties</p>
        <ul>
            <li id="NameField">Nigro, Brandon L.</li>
            <li id="DepartmentField">Information Technology</li>
            <li id="PhoneField">(773) 555-5555</li>
            <li id="OfficeField">John Academic Center</li>
        </ul>
    </body>
</html>

ただし、この「変数 + if」アプローチを使用することはお勧めしません。クリーンな xsl 強引なスタイルを使用してみてください (これにより、まったく同じ結果が得られます)。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <xsl:template match="Office">
        <html>
            <body>
                <xsl:apply-templates select="Employee"/>
            </body>
        </html>
    </xsl:template>
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <xsl:template match="Employee">
        <p>Employee <xsl:value-of select="@id"/> Properties</p>
        <ul>
            <xsl:apply-templates select="hithighlightedproperties/preferredname" mode="li">
                <xsl:with-param name="id" select="'NameField'"/>
            </xsl:apply-templates>
            <xsl:apply-templates select="hithighlightedproperties/yomidisplayname" mode="li">
                <xsl:with-param name="id" select="'DisplayNameField'"/>
            </xsl:apply-templates>
            <xsl:apply-templates select="hithighlightedproperties/department" mode="li">
                <xsl:with-param name="id" select="'DepartmentField'"/>
            </xsl:apply-templates>
            <xsl:apply-templates select="hithighlightedproperties/workphone" mode="li">
                <xsl:with-param name="id" select="'PhoneField'"/>
            </xsl:apply-templates>
            <xsl:apply-templates select="hithighlightedproperties/officenumber" mode="li">
                <xsl:with-param name="id" select="'OfficeField'"/>
            </xsl:apply-templates>
        </ul>
    </xsl:template>
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <xsl:template match="workphone">
        <xsl:variable name="office" select="../../../@code"/>
        <xsl:if test="$office='Chicago'">(773) </xsl:if>
        <xsl:if test="$office='Orland'">(708) </xsl:if>
        <xsl:value-of select="."/>
    </xsl:template>
    <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <xsl:template match="*[string-length(.)&gt;0]" mode="li">
        <xsl:param name="id" select="local-name()"/>
        <li id="{$id}">
            <xsl:apply-templates select="."/>
        </li>
    </xsl:template>
</xsl:stylesheet>
于 2012-11-06T15:24:34.273 に答える