我正在使用XSLT清理某些與InDesign相關的XML以便在其他系統中使用。我需要能夠從嵌套在文本主體中的標籤獲取值,然後將其刪除。使用XSLT獲取元素的值然後將其刪除
具體來說,標題和旁行嵌入在文本正文中。我需要能夠提取這些信息並將它們放在標題標籤中 - 我能夠做到這一點,但我似乎無法在我處理它時將它們從身體中取出。
這是我(簡化)XML:
<?xml version="1.0" encoding="UTF-8"?>
<k4Export xmlns="http://www.vjoon.com/K4Export/1.4.2">
<publication>
<id>107233722</id>
<name>NGM</name>
<origin>origin</origin>
<issue>
<article>
<textObjects>
<textObject>
<text>
<inlineTag name="Story">
<inlineTag name="body">
<inlineTag name="headline">The Headline</inlineTag> Lorem ipsum dolor sit amet,
consectetur adipiscing elit. <em>Vivamus mollis</em> ligula quis mi
blandit interdum. In rutrum imperdiet suscipit. Fusce interdum,
sem id scelerisque molestie, purus ligula fringilla sapien, nec
auctor velit eros eget felis. Duis eu tellus purus. Donec id viverra
neque.</inlineTag>
<inlineTag name="body">Donec nec nulla neque, sit amet placerat
elit. Nulla pulvinar elit sapien. Donec venenatis, arcu sed
pellentesque ultrices, neque mi sollicitudin elit, nec fermentum
eros nibh aliquam leo. Nam lectus neque, dapibus in scelerisque
in, fermentum nec ipsum.</inlineTag>
<inlineTag name="body">Sed sed <strong>congue</strong> neque. Nulla
nec ipsum vitae lacus consectetur convallis sed et nulla. Integer
posuere viverra felis, at pulvinar risus scelerisque ac. Aliquam a
orci ac est iaculis porta. Duis sollicitudin lectus sit amet velit
condimentum lobortis.
<inlineTag name="byline">-John Doe</inlineTag></inlineTag></inlineTag>
</text>
</textObject>
</textObjects>
</article>
</issue>
</publication>
</k4Export>
而且這裏是我使用改造XSLT。我可以將標題和副標題放入標題中,但我無法將其從內容中刪除。我是XSLT noob,所以任何建議將不勝感激。 textObject元素遍佈XML文檔,因此我故意使用非常普遍的XPath選擇器來訪問它們。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:default="http://www.vjoon.com/K4Export/1.4.2"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
exclude-result-prefixes="default">
<!-- Output Content -->
<xsl:template match="/">
<html>
<head>
<title>Sample</title>
</head>
<body>
<!-- Headline-->
<xsl:variable name="headlines" select="//default:inlineTag[@name='headline']" />
<xsl:choose>
<xsl:when test="$headlines">
<xsl:for-each select="$headlines">
<h1 class="headline"><xsl:value-of select="node()"/></h1>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<h1 class="headline">Headline Absent</h1>
</xsl:otherwise>
</xsl:choose>
<!-- Bylines -->
<xsl:variable name="bylines" select="//default:inlineTag[@name='byline']" />
<xsl:choose>
<xsl:when test="$bylines">
<xsl:for-each select="$bylines">
<h2 class="byline"><xsl:value-of select="node()"/></h2>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<h2 class="byline">Byline Absent</h2>
</xsl:otherwise>
</xsl:choose>
<div id="content">
<!-- body -->
<xsl:variable name="bodies" select="//default:inlineTag[@name='body']" />
<xsl:choose>
<xsl:when test="$bodies">
<xsl:for-each select="$bodies">
<p><xsl:value-of select="node()"/></p>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
@ user646151:這個輸入樣本的準確輸出是什麼? – 2011-05-03 22:29:28
好問題,+1。看到我的答案是一個簡單明瞭的解決方案。發現模板,發現XSLT。 :) – 2011-05-04 04:20:51