2

私はXMLコードを持っています:

<TestCases>
    <TestCase>
        <TestCaseElement>
            <Name><![CDATA[IP_EXTDEVICE]]></Name>
            <Tags>
                <Tag><![CDATA[Upperlimit]]></Tag>
            </Tags>
            <TaggedValues>
                <TaggedValue key="Upperlimit">
                    <value><![CDATA[4]]></value>
                </TaggedValue>
            </TaggedValues>
        </TestCaseElement>
    </TestCase>
</TestCases>

XSLT で値 4 を選択するにはどうすればよいですか?


<xsl:template name="selectOwnTaggedValue">
    <xsl:value-of select="[normalize-space(value)]" />
</xsl:template>
<xsl:template match="/">
    <xsl:for-each select="TestCases/TestCase/TestCaseElement">
        <xsl:apply-templates select="selectOwnTaggedValue[TaggedValues[TaggedValue key="Upperlimit"]" />
    </xsl:for-each>
</xsl:template>

変換で値4を選択する方法がわからないため、私の XSL コードは有効ではありません

事前にThx

4

4 に答える 4

1

これを試して...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
  <xsl:apply-templates select="*/TestCase"/>
</xsl:template>
      
<xsl:template match="TestCase">
  <xsl:value-of select="concat(
   'The upper limit for ',
  TestCaseElement/Name,
   ' is ',
  TestCaseElement/TaggedValues/TaggedValue[@key='Upperlimit']/value,
  '&#x0A;'
   )"/>
</xsl:template>

アップデート

サンプル入力に対してこのスタイルシートを実行した結果の出力は...

The upper limit for IP_EXTDEVICE is 4

別の出力が必要な場合はお知らせください。

于 2012-07-25T14:44:22.347 に答える
0

使用:

/*/TaggedValues/TaggedValue[@key='Upperlimit']/value

これにより、要素が選択されます。

string(/*/TaggedValues/TaggedValue[@key='Upperlimit']/value)

これにより、最初に選択された要素の文字列値が生成されます。

/*/TaggedValues/TaggedValue[@key='Upperlimit']/value/text()

これにより、選択したすべての要素のすべてのテキスト ノードの子が選択されます。

于 2012-07-25T14:36:37.667 に答える
0

汎用的に保持するには、パラメーターを使用してテンプレートを呼び出す方がよいと思います。私は正しいと思いますか?

これは私のXMLです:

<?xml version="1.0" encoding="ISO-8859-1"?>
<TestCases>
<TestCase>
<TestCaseElement>
<Name><![CDATA[IP_EXTDEVICE]]></Name>
        <Tags>
            <Tag><![CDATA[Upperlimit]]></Tag>
            <Tag><![CDATA[Lowerlimit]]></Tag>
        </Tags>
        <TaggedValues>
            <TaggedValue key="Upperlimit">
                <value><![CDATA[4]]></value>
            </TaggedValue>
            <TaggedValue key="Lowerlimit">
                <value><![CDATA[1]]></value>
            </TaggedValue>
        </TaggedValues>

        <Role><![CDATA[TESTSTEP]]></Role>
</TestCaseElement>
<and many more TestCaseElements/>
</TestCase>
</TestCases>

今、私は出力の上限と下限に必要であり、最善は一般的なテンプレートにあるので、今試してみます:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output name="text" method="text" omit-xml-declaration="yes" encoding="ISO-8859-1" />
    <xsl:template name="OwnTaggedValues">
        <xsl:value-of select="TaggedValues/TaggedValue[@key='taggedvalue']/value" />
    </xsl:template>
    <xsl:template match="/">
        <xsl:for-each select="TestCases/TestCase/TestCaseElement[Role = 'TESTSTEP']">
            <xsl:call-template name="OwnTaggedValues">
                </xsl:with-param name="taggedvalue" select="Upperlimit">
            </xsl:call-template>
            <xsl:text>And now the Lowerlimit</xsl:text>
            <xsl:call-template name="OwnTaggedValues">
                </xsl:with-param name="taggedvalue" select="Lowerlimit">
            </xsl:call-template>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

これはまさに私の問題です:-)。事前にショーンと他のすべての人に感謝します

于 2012-07-25T15:30:05.923 に答える
0

こんにちは、私の解決策は次のとおりです。

xsl で:

<xsl:template name="Unit" > 
    <xsl:value-of select="TaggedValues/TaggedValue[@key='Unit']/value"/> 
</xsl:template>

<xsl:template name="Precision" > 
    <xsl:value-of select="TaggedValues/TaggedValue[@key='Precision']/value"/> 
</xsl:template>

<xsl:template name="Upperlimit" > 
    <xsl:value-of select="TaggedValues/TaggedValue[@key='Upperlimit']/value"/> 
</xsl:template>

<xsl:template name="Lowerlimit" > 
    <xsl:value-of select="TaggedValues/TaggedValue[@key='Lowerlimit']/value"/> 
</xsl:template>

と呼ばれる

<xsl:call-template name="Unit"/>

このxmlで:

<TestCaseElement>
        <Name><![CDATA[ini_Alle-Schütze_OFF_V1-0]]></Name>
        <Tags>
            <Tag><![CDATA[Upperlimit]]></Tag>
            <Tag><![CDATA[Precision]]></Tag>
            <Tag><![CDATA[Lowerlimit]]></Tag>
            <Tag><![CDATA[Unit]]></Tag>
        </Tags>

        <TaggedValues>
            <TaggedValue key="Upperlimit">
                <value><![CDATA[1]]></value>
            </TaggedValue>
            <TaggedValue key="Precision">
                <value><![CDATA[0]]></value>
            </TaggedValue>
            <TaggedValue key="Lowerlimit">
                <value><![CDATA[1]]></value>
            </TaggedValue>
            <TaggedValue key="Unit">
                <value><![CDATA[ok]]></value>
            </TaggedValue>
        </TaggedValues>
   </TestCaseElement>

そして私の望む出力:

それぞれの値にある値です。

ショーンに感謝します。@キーを使用したソリューションは正しいヒントでした:-)

于 2012-08-01T07:54:47.637 に答える