我有以下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 [
现在解释如何获得此输出?我希望你的问题现在更容易理解。
答案 0 :(得分:1)
您可以使用
<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>
答案 1 :(得分:0)
如果您想简单复制整个内容,请执行以下操作:
<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>