1

以下のようなXMLファイルとXSLTファイルがあります

Check.xml

<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
    <cd>
        <title>Hide your heart</title>
        <artist>Bonnie Tyler</artist>
        <country>UK</country>
        <company>CBS Records</company>
        <price>9.90</price>
        <year>1988</year>
    </cd>
</catalog>

Check.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="no"/>
<xsl:for-each select="/">
<xsl:choose>
      <xsl:when test="country='USA'">
         <xsl:copy-of select="CHK"/>
      </xsl:when>
      <xsl:otherwise>
         <xsl:copy-of select="*"/>
      </xsl:otherwise>
      </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

変換しようとすると、以下のエラーが発生します

Error:XSLTProcessor::transformToXml() [<a href='xsltprocessor.transformtoxml'>xsltprocessor.transformtoxml</a>]: No stylesheet associated to this object

Iamがここで実行しようとしているのは、値が「USA」であるかどうかを確認し、そうである場合はUSAを「CHK」文字列に置き換えることです。

Iamが間違っている場所を取得していないか、Iamが正しい構文を使用していない場合。私はXSLTの初心者で、これを始めたばかりです。どんな助けでも大歓迎です!!! 私が期待している出力は

<catalog>
        <cd>
            <title>Empire Burlesque</title>
            <artist>Bob Dylan</artist>
            <country>**CHK**</country>
            <company>Columbia</company>
            <price>10.90</price>
            <year>1985</year>
        </cd>
        <cd>
            <title>Hide your heart</title>
            <artist>Bonnie Tyler</artist>
            <country>UK</country>
            <company>CBS Records</company>
            <price>9.90</price>
            <year>1988</year>
        </cd>
</catalog>
4

1 に答える 1

3

このXSLTの場合:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <xsl:template match="country[. = 'USA']">
    <country>**CHK**</country>
  </xsl:template>

</xsl:stylesheet>

...提供されたXMLに適用されます:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Edited by XMLSpy® -->
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
  </cd>
</catalog>

...目的の出力が生成されます:

<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>**CHK**</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
  </cd>
</catalog>

説明:

  • 最初のテンプレートはIdentity Transform-その仕事は、すべてのノードと属性をソースドキュメントから結果ドキュメントにそのまま出力することです。
  • <country>2番目のテンプレートは、値が「USA」である要素を照合することにより、ID変換をオーバーライドします。この場合、新しい<country>要素が作成され、目的の値が与えられます。

いくつかの優れたXSLT学習リソースについては、このリンクを参照することをお勧めします。

于 2012-11-14T09:38:19.637 に答える