在xslt中使用模板匹配来选择动态标签

时间:2014-01-31 12:24:01

标签: xml parsing xslt

我希望使用模板匹配来选择动态标签

输入xml具有用于页面划分的标签<?PG 1?>,<?PG 2?>,<?PG 3?> .....等

<?PG不变,但数字不断增加。

我希望使用像

这样的东西
       <xsl:template match="?PG*" >
    some conditions..
     </xsl:template>

如何选择节点沉思模板匹配

输入中还有许多特殊字符参数,如&amp; ndash的; ,&amp; MDASH; ,&amp; rsquo的;

有没有办法可以用&amp;#8211替换它们&amp; ndash,对其他人来说也是如此

示例输入:

     <TXTBKBD>
     <?PG 1?>
     <DIVISIONA>
     <THD><HD>Preliminary Section: Materials</HD></THD>
     <BY>
     <PN><FN>Christopher</FN><SN>Womack</SN><DEG>PhD, FACSM</DEG>
      <ROLE>Section Editor</ROLE></PN>
      </BY>
      <?PG 2?>
      <CHAPTER CHAN="B01429413-DA1-C1" V="2006.2" REPLACE="NO">
      <CHSO>
      <THD><HNUM>Chapter 1</HNUM><HD>Functional Anatomy</HD></THD>
      <BY><PN><SN>&NA;</SN></PN></BY>
      </CHSO>

xml大约是30 mb所以太大而无法放在这里

获取输入,因为我希望输出

   <a name="PG1"> </a><div class="pagenum"><div>P.1</div></div>

1 个答案:

答案 0 :(得分:0)

关于标签<?PG 1?>,<?PG 2?>,<?PG 3?>,这些是处理说明。您可以将它们与名为“processing-instruction()”的有用命令进行匹配

<xsl:template match="processing-instruction()">

或者,如果你想更具体,你可以这样做

<xsl:template match="processing-instruction()[name() = 'PG']">

要调用这些模板,您显然需要在XSLT中的某处使用 xsl:apply-templates

匹配它们后,使用 name()函数获取名称很简单,使用 xsl:value-of

获取值
<xsl:template match="processing-instruction()[name() = 'PG']">
   <a name="{name()}"> </a>
   <div class="pagenum">
      <div>P.<xsl:value-of select="." /></div>
   </div>
</xsl:template>

当匹配<?PG 1?>处理指令时,输出以下内容

<a name="PG"/><div class="pagenum"><div>P.1</div></div>