1

こんにちはxmlns="http://www.w3.org/1999/xhtml"、ソースの xhtml/xml ファイルから名前空間を削除し、ルート ノードの名前を変更したいと考えています。これを 1 つのスタイル シートのみを使用して実行したいと考えています。これは可能ですか?

これが私のソースxml/xhtmlの例です:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title/>
  <meta/>
</head>

<body link="#000000" bgcolor="#FFFFFF" leftmargin="0">
<div>
  <p>Here is a paragraph</p>
</div>
</body>
</html>

ここに私の望ましい出力があります:

<document>
  <section>
    <paragraph>Here is a paragraph</paragraph>
  </section>
</document>

現在、2 つのスタイル シート (以下を参照) を使用してのみこの結果を達成できますが、これらの命令を 1 つのスタイル シートに結合できるようにしたいと考えています。これは可能ですか?助けてくれてありがとう。

現在のスタイル シート 1:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8"/>

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

<xsl:template match="@*">
  <xsl:attribute name="{local-name()}"><xsl:value-of select="."/></xsl:attribute>
<xsl:apply-templates/>`
</xsl:template>`

<xsl:template match="*">
  <xsl:element name="{local-name()}">
    <xsl:apply-templates select="*|@*|node()"/>
  </xsl:element>
</xsl:template>

</xsl:stylesheet>

現在のスタイルシート 2:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

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

<xsl:template match="html">
  <document>
    <xsl:apply-templates select="*|@*|text()"/>
  </document>
</xsl:template>

<xsl:template match="div">
  <section>
    <xsl:apply-templates select="*|@*|text()"/>
  </section>`
</xsl:template>`

<xsl:template match="p">
  <paragraph>
    <xsl:apply-templates select="*|@*|text()"/>
  </paragraph>
</xsl:template>`

<xsl:template match="head"/>

</xsl:stylesheet>
4

4 に答える 4

3

XSLT 2.0 を使用しているため、追加するだけです。

xpath-default-namespace="http://www.w3.org/1999/xhtml"

スタイルシート 2 に追加して、作業は完了です。

于 2012-11-13T00:26:28.937 に答える
1

これを行うには、いくつかの異なる方法があります。これが1つです。

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

<xsl:template match="*">
  <xsl:element name="{local-name()}">
    <xsl:apply-templates select="@*|node()" />
  </xsl:element>
</xsl:template>

<xsl:template match="@*|comment()|processing-instruction()|text()">
  <xsl:copy />
</xsl:template>

<xsl:template match="/*"><!-- xhtml:html -->
  <document>
    <xsl:apply-templates select="@*|node()" />
  </document>
</xsl:template>

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

<xsl:template match="xhtml:div">
  <section>
    <xsl:apply-templates select="@*|node()" />
  </section>`
</xsl:template>`

<xsl:template match="xhtml:p">
  <paragraph>
    <xsl:apply-templates select="@*|node()" />
  </paragraph>
</xsl:template>`

<xsl:template match="xhtml:head"/>

</xsl:stylesheet>

更新 テンプレートの一致にxhtml:を追加するのを忘れました。修正されました。

于 2012-11-12T23:11:33.317 に答える
1

これだけ

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="http://www.w3.org/1999/xhtml" exclude-result-prefixes="x">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <document>
   <xsl:apply-templates/>
  </document>
 </xsl:template>

 <xsl:template match="x:div">
  <section><xsl:apply-templates/></section>
 </xsl:template>

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

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title/>
        <meta/>
    </head>
    <body link="#000000" bgcolor="#FFFFFF" leftmargin="0">
        <div>
            <p>Here is a paragraph</p>
        </div>
    </body>
</html>

必要な正しい結果が生成されます。

<document>
   <section>
      <paragraph>Here is a paragraph</paragraph>
   </section>
</document>
于 2012-11-13T03:56:52.997 に答える