我正在使用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