1
MSH.1:MSH.2:MSH.3:PID.1:PID.2:ORC.1:ORC.3

上記の文字列パターンを以下の XML 形式に変換したい

<filters>
<element group="MSH">
  <location path="MSH.1"/>
  <location path="MSH.2"/>
  <location path="MSH.3"/>
</element>
<element group="PID">
  <location path="PID.1"/>
  <location path="PID.2"/>
</element>
<element group="ORC">
  <location path="ORC.1"/>
  <location path-"ORC.3"/>
</elment>
</filters>

上記のシナリオを実現するためのサンプル XSLT を用意できますか

注: XSLT 2.0 ans saxon トランスフォーマーを使用しています

4

3 に答える 3

3

Assuming you start the transformation in Saxon with parameters

-it:main in=MSH.1:MSH.2:MSH.3:PID.1:PID.2:ORC.1:ORC.3

try

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

<xsl:param name="in"/>

<xsl:template name="main">
<filters>
  <xsl:variable name="tokens" select="tokenize($in, ':')"/>
  <xsl:for-each-group select="$tokens" group-by="substring-before(., '.')"/>
   <element group="{current-grouping-key()}">
     <xsl:for-each select="current-group()">
       <location path="{.}"/>
     </xsl:for-each>
   </element>
  </xsl:for-each-group>
</filters>
<xsl:template>

</xsl:stylesheet>
于 2012-07-23T20:41:41.810 に答える
2

XSLT 2.0 で unparsed-text() 関数を使用して、ドキュメントを文字列変数としてロードできます。

次に、おそらく xsl:analyze-string 命令を使用して、文字列を最初に文字で分割し":"、次にピリオド文字で分割します。

于 2012-07-23T15:05:52.030 に答える
0

XSLT は、XML を (別のものに) 操作することを目的としています。したがって、少なくとも最初に文字列を XML 化する必要があります

<xmlize>MSH.1:MSH.2:MSH.3:PID.1:PID.2:ORC.1:ORC.3</xmlize>

次に、ルート要素で XSLT マッチングを行い、`tokenize()' を使用して文字列を処理できます。この議論を見る

これを XSLT で行うのは少し奇妙です。正規表現分割による文字列操作関数を持つ別のスクリプト/言語を使用できませんか?

注意: 「xmlize」するときは、必要に応じて「<」「>」と「&」をエスケープすることを忘れないでください

于 2012-07-23T14:57:30.090 に答える