如何转换XML空标记

时间:2012-11-15 03:14:50

标签: xml xslt xpath

这可能听起来很奇怪,但我需要将所有空标签转换为一对打开和关闭标签,中间有一个carrage返回。提前谢谢。

来自

<OBR>
<OBR_31_Lab_Ins_Typ_Id>L</OBR_31_Lab_Ins_Typ_Id>
<OBX>
<OBX_3_Ltt_Cd>N877</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx/>
<OBX_6_Lbr_Unt_Tx/>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>N878</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>-15</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx/>
<OBX_6_Lbr_Unt_Tx/>
</OBX>
<OBR>

<OBR>
<OBR_31_Lab_Ins_Typ_Id>L</OBR_31_Lab_Ins_Typ_Id>
<OBX>
<OBX_3_Ltt_Cd>N877</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>0</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx>

</OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx>

</OBX_6_Lbr_Unt_Tx>
</OBX>
<OBX>
<OBX_3_Ltt_Cd>N878</OBX_3_Ltt_Cd>
<OBX_5_1_Lbr_No>-15</OBX_5_1_Lbr_No>
<OBX_5_2_Lbr_Tx>

</OBX_5_2_Lbr_Tx>
<OBX_6_Lbr_Unt_Tx>

</OBX_6_Lbr_Unt_Tx>
</OBX>
<OBR>

2 个答案:

答案 0 :(得分:3)

使用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

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

  <xsl:template match="*[not(node())]">
    <xsl:copy>
      <xsl:text>&#13;&#10;</xsl:text>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

你可以使用这样的正则表达式:

s/\<([a-zA-z0-9-_]+(\s+[a-zA-z0-9-_]+=".*?")*?\s*\/\>/<$1>\n\n<\/$1>/g