当前位置 : 主页 > 网页制作 > xml >

xml – XSLT如何更改节点名称的一部分?

来源:互联网 收集:自由互联 发布时间:2021-06-13
我想创建一个XSLT,它将通过将名称中的点转换为下划线来更改 XML文件中所有元素的名称.有很多关于更改元素全名的信息,但没有更换名称的一部分.我应该如何设置我的XSLT? 必须将以下
我想创建一个XSLT,它将通过将名称中的点转换为下划线来更改 XML文件中所有元素的名称.有很多关于更改元素全名的信息,但没有更换名称的一部分.我应该如何设置我的XSLT?

必须将以下XML文件转换为表tblPerson:

<?xml version="1.0"?>
<DB>
   <person>
      <person.id id="P000072">
      <person.last_name>Drukker</person.last_name>
      <person.first_name>Bernard</person.first_name>
      <person.d_birth>1910-01-01</person.d_birth>
      <person.place_birth>Amsterdam</person.place_birth>
      <person.d_death>1992-12-13</person.d_death>
      <person.place_death>Velp</person.place_death>
   </person>
</DB>

接下来显示转换的输出应该如何.点“.”必须转换为下划线“_”.

<?xml version="1.0"?>
<DB>
  <tblPerson>
  <person_id>P000072</person_id>
  <person_last_name>Drukker</person_last_name>
  <person_first_name>Bernard</person_first_name>
  <person_d_birth>1910-01-01</person_d_birth>
  <person_place_birth>Amsterdam</person_place_birth>
  <person_d_death>1992-12-13</person_d_death>
  <person_place_death>Velp</person_place_death>
  </tblPerson>
</DB>

我希望相同的代码可以应用于具有不同名称但具有相似点特征的其他节点.您的建议将受到极大的赞赏.

卡雷尔

写一个模板

<xsl:template match="*[contains(local-name(), '.')]">
  <xsl:element name="{translate(local-name(), '.', '_')}" namespace="{namespace-uri()}">
    <xsl:apply-templates select="@* | node()"/>
  </xsl:element>
</xsl:template>

它操纵名称,然后使用模板

< xsl:template match =“person”>< tblPerson>< xsl:apply-templates />< / tblPerson>< / xsl:template>

更改person元素的名称,然后添加标识转换模板

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

确保其余部分不变地复制.

网友评论