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

假设您在撒克逊语中使用参数开始转换

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

尝试

<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 回答