0

入力:

<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" type="NOIA" xsi:noNamespaceSchemaLocation="sample.xsd">
<id>X17A</id>
<companyName>Foo Bars</companyName>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tincidunt turpis id metus porttitor convallis. Duis ullamcorper magna a est suscipit eget blandit magna ullamcorper. Vivamus sit amet auctor elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tincidunt turpis id metus porttitor convallis. Duis ullamcorper magna a est suscipit eget blandit magna ullamcorper. Vivamus sit <url>http://www.google.com/</url> amet auctor elit.</p>
</document>

望ましい出力:

<html>
<body>
<h1>Foo Bars Company</h1>
<div><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tincidunt turpis id metus porttitor convallis. Duis ullamcorper magna a est suscipit eget blandit magna ullamcorper. Vivamus sit amet auctor elit.</p></div>
<div><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tincidunt turpis id metus porttitor convallis. Duis ullamcorper magna a est suscipit eget blandit magna ullamcorper. Vivamus sit <a href="http://www.google.com/">http://www.google.com/</a> amet auctor elit.</p></div>
</body>
</html>

これが私がシートで得た限りです:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

<xsl:output method="html" indent="yes" version="4.0"/>

<xsl:template match="/">
<html>
  <body>
    <xsl:apply-templates/>
  </body>
</html>
</xsl:template>

<xsl:template match="id"></xsl:template>

<xsl:template match="companyName">
<h1><xsl:value-of select="."/></h1>
</xsl:template>

<xsl:template match="url">
<a href="#test"><xsl:value-of select="."/></a>
</xsl:template>

<xsl:template match="p">
<div><p><xsl:value-of select="."/></p></div>
</xsl:template>

</xsl:stylesheet>

href="" に値を入れる方法がわかりません

また、これはhrefで終わるわけではありません.pでテキストを取得しているだけです.

4

1 に答える 1

1

この XSLT の場合:

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

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

  <xsl:template match="url">
    <a href="{.}">
      <xsl:apply-templates />
    </a>
  </xsl:template>

  <xsl:template match="/*">
    <html>
      <body>
        <xsl:apply-templates select="*" />
      </body>
    </html>
  </xsl:template>

  <xsl:template match="id" />

  <xsl:template match="companyName">
    <h1>
      <xsl:value-of select="concat(., ' Company')" />
    </h1>
  </xsl:template>

  <xsl:template match="p">
    <div>
      <p>
        <xsl:apply-templates />
      </p>
    </div>
  </xsl:template>
</xsl:stylesheet>

...最初に提供された XML に適用されます。

<?xml version="1.0" encoding="utf-8"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
type="NOIA" xsi:noNamespaceSchemaLocation="sample.xsd">
  <id>X17A</id>
  <companyName>Foo Bars</companyName>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis
  tincidunt turpis id metus porttitor convallis. Duis ullamcorper
  magna a est suscipit eget blandit magna ullamcorper. Vivamus sit
  amet auctor elit.</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis
  tincidunt turpis id metus porttitor convallis. Duis ullamcorper
  magna a est suscipit eget blandit magna ullamcorper. Vivamus sit 
  <url>http://www.google.com/</url>amet auctor elit.</p>
</document>

...目的の結果が生成されます。

<html>
  <body>
    <h1>Foo Bars Company</h1>
    <div>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      Duis tincidunt turpis id metus porttitor convallis. Duis
      ullamcorper magna a est suscipit eget blandit magna
      ullamcorper. Vivamus sit amet auctor elit.</p>
    </div>
    <div>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      Duis tincidunt turpis id metus porttitor convallis. Duis
      ullamcorper magna a est suscipit eget blandit magna
      ullamcorper. Vivamus sit 
      <a href="http://www.google.com/">
      http://www.google.com/</a>amet auctor elit.</p>
    </div>
  </body>
</html>

このソリューションは、XSLT 1.0 または XSLT 2.0 のいずれかで機能することに注意してください。

説明:

  • 最初のテンプレートはThe Identity Transform. その目的は、すべてのノードと属性をそのままソース ドキュメントから結果ドキュメントにコピーすることです。

  • 2 番目のテンプレートは、ドキュメント内のすべての<url>要素に一致します。要素が見つかると、(XSLT の機能を介して)要素の元の値に一致する属性と、その元の値に一致する値が与えられ<url>た新しい<a>要素が作成されます。href<url>AVT [Attribute Value Template]<url>

以外の要素<url>を同じ方法で置き換える必要がある場合matchは、必要に応じて 2 番目のテンプレートの属性を変更するだけでよいことに注意してください。例えば:

<xsl:template match="url|some-other-element|yetAnotherElement">
  • 3 番目のテンプレートは任意の<id>要素に一致し、その要素の代わりに何も出力しません (事実上、その要素を削除します)。

  • 4 番目のテンプレートは、任意の<companyName>要素に一致します。その代わりに、新しい要素が作成され、の値と "Company" を<h1>連結した値が与えられます。<companyName>

  • 5 番目のテンプレートは、任意の要素に一致し、それ<p>を要素にラップし<div>ます。

于 2012-10-10T21:47:36.167 に答える