XSLT 选择解码值

问题描述 投票:0回答:2

下面是我的 XML 示例。看起来这些值已被编码。
我正在创建示例 xslt 模板,如下所示

<xsl:value-of select="fee_number"/>

如何解码值以便它们正常显示? 谢谢。

<fees>
  <fee>
    <fee_number>_x0031_645111</fee_number>
    <fee_type>Property_x0020_Registration_x0020_Fee</fee_type>
    <fee_issued_date>_x0030_1_x002F_01_x002F_2023</fee_issued_date>
    <fee_amount>_x0024_13.00</fee_amount>
    <fee_transfer_date>_x0030_5_x002F_12_x002F_2023</fee_transfer_date>
    <fee_transfer_status>Yes</fee_transfer_status>
  </fee>
  <fee>
    <fee_number>_x0031_459853</fee_number>
    <fee_type>Property_x0020_Registration_x0020_Fee</fee_type>
    <fee_issued_date>_x0030_1_x002F_01_x002F_2022</fee_issued_date>
    <fee_amount>_x0024_13.00</fee_amount>
    <fee_transfer_date>_x0030_5_x002F_16_x002F_2022</fee_transfer_date>
    <fee_transfer_status>Yes</fee_transfer_status>
  </fee>
<fees>
xml xslt
2个回答
0
投票

在 XSLT 3.0 中你可以这样做:

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

<xsl:mode on-no-match="shallow-copy"/>

<xsl:template match="text()">
    <xsl:analyze-string select="." regex="_x([0-9A-F]*)?_">
        <xsl:matching-substring>
            <xsl:value-of select="parse-xml-fragment('&amp;#x'||regex-group(1)||';')" />
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:value-of select="." />
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>

</xsl:stylesheet>

获得:

<?xml version="1.0" encoding="UTF-8"?>
<fees>
   <fee>
      <fee_number>1645111</fee_number>
      <fee_type>Property Registration Fee</fee_type>
      <fee_issued_date>01/01/2023</fee_issued_date>
      <fee_amount>$13.00</fee_amount>
      <fee_transfer_date>05/12/2023</fee_transfer_date>
      <fee_transfer_status>Yes</fee_transfer_status>
   </fee>
   <fee>
      <fee_number>1459853</fee_number>
      <fee_type>Property Registration Fee</fee_type>
      <fee_issued_date>01/01/2022</fee_issued_date>
      <fee_amount>$13.00</fee_amount>
      <fee_transfer_date>05/16/2022</fee_transfer_date>
      <fee_transfer_status>Yes</fee_transfer_status>
   </fee>
</fees>

盗自:https://stackoverflow.com/a/42110257/17153010


0
投票

如果您的 XSLT 处理器支持通过 .Net c# 语言进行扩展,您可以按照以下方式编写 XSLT。

c#

void Main()
{
    string var = "_x0031_645111";
    
    XmlConvert.DecodeName(var).Dump();
}

输出

1645111
© www.soinside.com 2019 - 2024. All rights reserved.