我有以下XML。
<sec xmlns:xlink="http://www.w3.org/1999/xlink" id="fm2" sec-type="other">
<title />
<?SAE page="ii"?>
<p><bold>Other SAE books of interest:</bold></p>
<p><bold>Electric and Hybrid-Electric Vehicles</bold></p>
<p>Edited by Ronald K. Jurgen</p>
<p>(Product Code: PT-143.SET)</p>
<p><bold>Diesel Emissions and Their Control</bold></p>
<p>By Magdi K. Khair and W. Addy Majewski</p>
<p>(Product Code: R-303)</p>
<p><bold>Hybrid Powered Vehicles, Second Edition</bold></p>
<p>By John M. German</p>
<p>(Product Code: T-125)</p>
<p>For more information or to order a book, contact SAE International at</p>
<p>400 Commonwealth Drive, Warrendale, PA 15096-0001, USA;</p>
<p>phone 877-606-7323 (U.S. and Canada only) or 724-776-4970 (outside U.S. and Canada);</p>
<p>fax 724-776-0790;</p>
<p>email <email>CustomerService@sae.org</email>;</p>
<p>website <uri xlink:href="http://books.sae.org">http://books.sae.org</uri>.</p>
</sec>
我必须为它创建 XSLT。我是这样做的:
<xsl:for-each select="book-front/sec">
<xsl:value-of select="title"/>
<xsl:value-of select="p"/>
</xsl:for-each>
但它没有解析任何东西。
主要问题是解析<?SAE page="ii"?>
它不允许解析其进一步的属性。我不知道如何解析它,然后它对应的 XSLT 是什么。
我的 xml 是
<sec id="ch1.4">
<label><bold>1.4</bold></label>
<title><bold>Energy Consumption of Commercial Vehicles</bold></title>
<p>Commercial vehicle manufacturing and operation is a major source of energy consumption globally. In 2009, the United States consumed 23% of the global petroleum production [<xref ref-type="bibr" rid="R3">1.3</xref>]. According to the U.S. Department of Energy, 72% <?SAE page="8"?>of the U.S. petroleum consumption is for transportation. Commercial vehicles consumed up to 18.7% of the total energy consumption in transportation in the United States. In other words, commercial vehicles in the United States alone consumed over 3% of the global petroleum production in 2009 [<xref ref-type="bibr" rid="R3">1.3</xref>, <xref ref-type="bibr" rid="R34">1.34</xref>].</p></sec>
应用您的代码后,我得到了
Commercial vehicle manufacturing and operation is a major source of energy consumption globally. In 2009, the United States consumed 23% of the global petroleum production [
但我想要
**Energy Consumption of Commercial Vehicles**
Commercial vehicle manufacturing and operation is a major source of energy consumption globally. In 2009, the United States consumed 23% of the global petroleum production [1.3 ]. According to the U.S. Department of Energy, 72%Page 8 of the U.S. petroleum consumption is for transportation. Commercial vehicles consumed up to 18.7% of the total energy consumption in transportation in the United States. In other words, commercial vehicles in the United States alone consumed over 3% of the global petroleum production in 2009 [
现在解释如何获取此输出?我希望我的问题现在对你来说更容易理解。
<xsl:template match="processing-instruction('SAE')">
<xsl:value-of select="." />
</xsl:template>
以匹配名为 SAE
的处理指令。(当然还有<xsl:apply-templates select="processing-instruction('SAE')" />
)
指令的值并不是真正的 XML,即使在这种情况下它看起来像常规属性。
处理指令实际上只包含纯文本,因为它们可能是任何东西 - 从简单的信息位到XSLT以外的语言的完整程序。
您只能获取指令的内容,在您的情况下是字符串'page="ii"'
,然后您必须手动解析。
你可以在 XPath 中像这样做:
<xsl:template match="processing-instruction('SAE')">
<xsl:variable name="start-token">page="</xsl:variable>
<xsl:variable name="end-token">"</xsl:variable>
<xsl:variable name="temp" select="substring-after(., $start-token)" />
<xsl:value-of select="substring-before($temp, $end-token)" />
<!-- output: "ii" -->
</xsl:template>
如果要简单地复制整个内容,只需执行以下操作:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
这称为标识模板。然后,创建模板匹配项以覆盖复制的节点。如果是外部参照,您可以尝试。
<xsl:template match="xref">
<a href="{@rid}">
<xsl:apply-templates/>
</a>
</xsl:template>