【问题标题】:无法进行 XSLT 转换
【发布时间】:2022-01-22 00:37:04
【问题描述】:

我有一个这样的xml

<?xml version="1.0" encoding="UTF-8"?>
<chapter>
   <title>Partial Interests</title>
   <division>
      <title>5.01Concurrent Interests</title>
      <sections>
         <title>[1]In General</title>
         <paragraphs>
            <paragraph>An owner of property  periods.</paragraph>
            <paragraph>On other occasions, be co-owned in </paragraph>
         </paragraphs>
      </sections>
   </division>
</chapter>

我需要的预期xml是

<CHAPTER N='5' STATUS='MAIN' TYPE='CHAPTER' MEDIA='ALL' FATCA='NO'>
<MARKER MRKDATE="20210510" MRKEID="VAL:450.1" MRKTIME="14431916" MRKTYPE="LD DU"/>
<HEAD>Partial Interests - Tracer Bullet phase 2</HEAD>
<RHD>PARTIAL INTERESTS</RHD>
<SUPPRHD>2021 CUMULATIVE SUPPLEMENT NO. 1</SUPPRHD>
<RELEASE>Copyright &#169; December 2003</RELEASE>
<SYNOPSIS/>
<CHAP-INTRO STATUS="MAIN">
<MARKER MRKDATE="20210510" MRKEID="VAL:450.2" MRKTIME="14431916" MRKTYPE="DU"/>
<NEW-TEXT OPINSTLO="YES" SUPPNO="2012-2">
<INSTRUC BREAK="0" CTD="0" PLURAL="N">Chapter 5 was revised effective December 2003. Developments occurring  after that date appear below.</INSTRUC>
</NEW-TEXT>
</CHAP-INTRO>
<?atom aid="VAL:451" date="20210510" time="14431916" status="EDITOR"?>
<PARA1 CTD="0" D="5.01" FATCA="NO" STATUS="MAIN" TYPE="NONE" UID="5.01">
<MARKER MRKDATE="20210510" MRKEID="VAL:451.1" MRKTIME="14431916" MRKTYPE="LD DU"/>
<HEAD>Concurrent Interests</HEAD>
<PARA2 CTD="0" D="1" STATUS="MAIN" TYPE="NONE" UID="5.01[1]">
<MARKER MRKDATE="20210510" MRKEID="VAL:451.2" MRKTIME="14431916" MRKTYPE="LD DU"/>
<HEAD>In General</HEAD>
<P>An owner of property periods.</P><P>On other occasions, be co-owned in</p></PARA2></PARA1></CHAPTER>

我开发的xsl是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xs"
                version="2.0">
    <xsl:strip-space elements="*"/>
    <xsl:template match="node()|@*" mode="pretrans">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>   
    <xsl:template match="chapter">
        <CHAPTER N='5' STATUS='MAIN' TYPE='CHAPTER' MEDIA='ALL' FATCA='NO'>
    <MARKER MRKDATE="20210510" MRKEID="VAL:450.1" MRKTIME="14431916" MRKTYPE="LD DU"/>          <xsl:apply-templates/>
         <SUPPRHD>2021 CUMULATIVE SUPPLEMENT NO. 1</SUPPRHD>
    <RELEASE>Copyright &#169; December 2003</RELEASE>
    <SYNOPSIS/>
    <CHAP-INTRO STATUS="MAIN">
    <MARKER MRKDATE="20210510" MRKEID="VAL:450.2" MRKTIME="14431916" MRKTYPE="DU"/>
    <NEW-TEXT OPINSTLO="YES" SUPPNO="2012-2">
    <INSTRUC BREAK="0" CTD="0" PLURAL="N">Chapter 5 was revised effective December 2003. Developments occurring  after that date appear below.</INSTRUC>
    </NEW-TEXT>
    </CHAP-INTRO>
    <PARA1 CTD="0" D="5.01" FATCA="NO" STATUS="MAIN" TYPE="NONE" UID="5.01">
    <MARKER MRKDATE="20210510" MRKEID="VAL:451.1" MRKTIME="14431916" MRKTYPE="LD DU"/>
            <xsl:apply-templates select="division" />
            <PARA2 CTD="0" D="1" STATUS="MAIN" TYPE="NONE" UID="5.01[1]">
    <MARKER MRKDATE="20210510" MRKEID="VAL:451.2" MRKTIME="14431916" MRKTYPE="LD DU"/>
            <xsl:apply-templates select="sections" />
            </PARA2>
            </PARA1>
        </CHAPTER>
    </xsl:template>
    <xsl:template match="title">
                <HEAD><xsl:apply-templates/></HEAD>
    </xsl:template>
    <xsl:template match="paragraph">
                <p><xsl:apply-templates/></p>
    </xsl:template>
</xsl:stylesheet>

我得到的输出 xml 而不是预期的输出是

&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;CHAPTER N="5" STATUS="MAIN" TYPE="CHAPTER" MEDIA="ALL" FATCA="NO"&gt;&lt;MARKER MRKDATE="20210510" MRKEID="VAL:450.1" MRKTIME="14431916" MRKTYPE="LD DU"/&gt;&lt;HEAD&gt;Partial Interests&lt;/HEAD&gt;&lt;HEAD&gt;5.01Concurrent Interests&lt;/HEAD&gt;&lt;HEAD&gt;[1]In General&lt;/HEAD&gt;&lt;p&gt;An owner of property periods.&lt;/p&gt;&lt;p&gt;On other occasions, be co-owned in &lt;/p&gt;&lt;SUPPRHD&gt;2021 CUMULATIVE SUPPLEMENT NO. 1&lt;/SUPPRHD&gt;&lt;RELEASE&gt;Copyright © December 2003&lt;/RELEASE&gt;&lt;SYNOPSIS/&gt;&lt;CHAP-INTRO STATUS="MAIN"&gt;&lt;MARKER MRKDATE="20210510" MRKEID="VAL:450.2" MRKTIME="14431916" MRKTYPE="DU"/&gt;&lt;NEW-TEXT OPINSTLO="YES" SUPPNO="2012-2"&gt;&lt;INSTRUC BREAK="0" CTD="0" PLURAL="N"&gt;Chapter 5 was revised effective December 2003. Developments occurring  after that date appear below.&lt;/INSTRUC&gt;&lt;/NEW-TEXT&gt;&lt;/CHAP-INTRO&gt;&lt;PARA1 CTD="0" D="5.01" FATCA="NO" STATUS="MAIN" TYPE="NONE" UID="5.01"&gt;&lt;MARKER MRKDATE="20210510" MRKEID="VAL:451.1" MRKTIME="14431916" MRKTYPE="LD DU"/&gt;&lt;PARA2 CTD="0" D="1" STATUS="MAIN" TYPE="NONE" UID="5.01[1]"&gt;&lt;MARKER MRKDATE="20210510" MRKEID="VAL:451.2" MRKTIME="14431916" MRKTYPE="LD DU"/&gt;&lt;/PARA2&gt;&lt;/PARA1&gt;&lt;/CHAPTER&gt;

对于我开发的 xsl 没有正确获取 para1 和 par2 并且剩余数据位于底部而不是开始,所以我需要对我的 xsl 进行哪些更改才能获得预期的输出。

【问题讨论】:

  • 请将代码减少到演示问题所需的最低限度 - 请参阅:minimal reproducible example
  • mode="pretrans" 在那里做什么,我看不出该模式有什么用处。
  • 为什么代码使用version="2.0",问题却被标记为xslt-1.0

标签: xml xslt xslt-1.0 transformation


【解决方案1】:

尚未对其进行详细调试,但当章节没有任何名为 sections 的直系子级时,match="chapter" template 规则会执行 &lt;xsl:apply-templates select="sections" /&gt; 令人怀疑。

(请注意,使用模式感知转换会使此类错误更容易被发现,但遗憾的是很少有人这样做。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2013-08-15
    • 2014-02-01
    相关资源
    最近更新 更多