1

XML のすべての要素のキーと値のペアを作成しようとしています。例:

<a>
   <b>1</b>
   <c>2</c>
</a>

戻ります:

<KEY_VALUE_PAIR>
   <KEY>a/b</KEY>
   <VALUE>1</VALUE>
</KEY_VALUE_PAIR>
<KEY_VALUE_PAIR>
   <KEY>a/c</KEY>
   <VALUE>2</VALUE>
</KEY_VALUE_PAIR>

しかし、私の問題は、入力 xml を文字列として取得したいということです。

したがって、これを入力として使用する代わりに:

<a>
   <b>1</b>
   <c>2</c>
</a>

私はこれを使いたい:

<XML>
   <content>&lt;a&gt;&lt;b&gt;xyz&lt;/a&gt;&lt;/b&gt;</content>
</XML>

これは私のコードです:ほとんど機能します。キーと値のペアの作成は問題ありませんが、XML/コンテンツで XML を取得する代わりに、入力 xml のキーと値のペアを作成します。

 <xsl:output method="xml" indent="yes"/>

 <xsl:template match="/XML/content">
  <xsl:value-of select="/XML/content" disable-output-escaping="yes"/>
  <xsl:call-template name="CreateNotificationValues"/>
  <xsl:call-template name="CreateNotificationClear"/>
 </xsl:template>

 <xsl:template match="/" name="CreateNotificationValues">
    <xsl:for-each select="//*[count(child::*) = 0]">
     <KEY_VALUE_PAIR>
      <KEY>
       <xsl:for-each select="ancestor::*"><xsl:value-of select="name()"/>/</xsl:for-each>
       <xsl:value-of select="name()"/>
      </KEY>
      <VALUE>
       <xsl:value-of select="text()"/>
      </VALUE>
     </KEY_VALUE_PAIR>
    </xsl:for-each>
 </xsl:template>

 <xsl:template match="/KEY_VALUE_PAIR" name="CreateNotificationClear">
 </xsl:template>

これをどのように使用できますか:

<xsl:value-of select="/XML/content" disable-output-escaping="yes"/>

別のテンプレートの入力 xml として ?

4

1 に答える 1

0

どうすればこれを使用できますか:

<xsl:value-of select="/XML/content" disable-output-escaping="yes"/> 

別のテンプレートの入力xmlとして?

できません-整形式のXMLドキュメントでXSLT変換を実行できますが、上記のXSLT命令の結果は単なるテキストノードです(最終的な表現はXMLのように見えるかもしれませんが、これは1次元の文字列です) -ノードのツリーではありません。

文字列をツリー(解析されたXMLドキュメント)として使用するには、この文字列を解析する必要があります。これを実行するツールは、 xmlパーサーと呼ばれます。

XSLT1.0またはXSLT2.0変換では、文字列を取得してXMLドキュメントツリーに解析することはできません

XSLT 3.0には、まさにそれを行う標準関数があるかもしれませんparse-xml()

XSLT1.0またはXSLT2.0では、文字列をXmlDocumentオブジェクトに解析し、このオブジェクトを変換に戻す、お気に入りのPLで記述された拡張関数を呼び出す必要があります。

于 2012-08-27T12:05:50.487 に答える