如何匹配XSLT中的processing-instruction元素?

Ant*_*ony 8 xslt xpath processing-instruction

我的xml内容中有一些处理指令元素,例如:

<?legalnoticestart?>
<?sourcenotestart?>
<para>Content para</para>
<?sourcenoteend?>
<?literallayoutstart?>
<para>body content </para>
<?literallayoutend?>
<?legalnoticeend?>
Run Code Online (Sandbox Code Playgroud)

我如何匹配这些元素并获得以下所需元素格式的内容?

必需的xml:

<legalnotice>
<sourcenote>
<p>Content para</p>
</sourcenote>
<literallayout>
<p>body content</p>
</literallayout>
</legalnotice>
Run Code Online (Sandbox Code Playgroud)

请指教....

最诚挚的问候,安东尼

but*_*ken 17

默认情况下,XSLT处理器将忽略PI - 为了匹配它们以便做有趣和有用的事情,您可以在模板中使用处理指令匹配:

<xsl:template match="processing-instruction('legalnoticestart')">
  <legalnotice><xsl:value-of select="."/></legalnotice>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

例如,以下样式表:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="doc">
        <xsl:apply-templates select="processing-instruction('legalnoticestart')" />
    </xsl:template>

    <xsl:template match="processing-instruction('legalnoticestart')">
        <legalnotice><xsl:value-of select="."/></legalnotice>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

有了这个文件:

<doc>
   <?legalnoticestart?>
   <?legalnoticeend?>
</doc>
Run Code Online (Sandbox Code Playgroud)

产量:

<?xml version="1.0"?>
<legalnotice>
</legalnotice>
Run Code Online (Sandbox Code Playgroud)