10

たとえば、xml コンテンツ内に処理命令要素がいくつかあります。

<?legalnoticestart?>
<?sourcenotestart?>
<para>Content para</para>
<?sourcenoteend?>
<?literallayoutstart?>
<para>body content </para>
<?literallayoutend?>
<?legalnoticeend?>

これらの要素を一致させ、以下の必要な要素形式でコンテンツを取得するにはどうすればよいですか?

必要な XML:

<legalnotice>
<sourcenote>
<p>Content para</p>
</sourcenote>
<literallayout>
<p>body content</p>
</literallayout>
</legalnotice>

ご意見をお聞かせください....

よろしく、 アントニー

4

2 に答える 2

18

デフォルトでは、XSLT プロセッサは PI を無視します - 楽しく便利なことを行うためにそれらを一致させるには、テンプレートでprocessing-instruction一致を使用できます。

<xsl:template match="processing-instruction('legalnoticestart')">
  <legalnotice><xsl:value-of select="."/></legalnotice>
</xsl:template>

たとえば、次のスタイルシート:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="doc">
        <xsl:apply-templates select="processing-instruction('legalnoticestart')" />
    </xsl:template>

    <xsl:template match="processing-instruction('legalnoticestart')">
        <legalnotice><xsl:value-of select="."/></legalnotice>
    </xsl:template>
</xsl:stylesheet>

このドキュメントでは:

<doc>
   <?legalnoticestart?>
   <?legalnoticeend?>
</doc>

収量:

<?xml version="1.0"?>
<legalnotice>
</legalnotice>
于 2009-09-02T10:30:05.287 に答える
2

これは本質的に悪い設計です。開始/終了タグを一致させようとしているようですが、実際の xml 要素を使用する場合に利用可能なメソッドを使用していないようです。

開始/終了処理命令を一致させることはできますが、xpath では、処理命令間のノードを見つけるのは困難です。このような命令を入れ子にしたり繰り返したりすると、さらに難しくなる可能性があります。結局のところ、これが行っていることは、xml を使用せずに xml が既に行っていることを複製しようとしているということですか?

于 2009-09-02T10:51:03.373 に答える