Xml 使用XSLT按属性选择唯一元素

Xml 使用XSLT按属性选择唯一元素,xml,xslt-1.0,Xml,Xslt 1.0,我的XML有一些奇怪的结构。它是由驱动网站的CMS生成的,但我们需要使用数据库的XML输出在Adobe InDesign中创建打印文档 我需要选择一些包含在span标记中的内容,这些span标记具有特定的类,但我的XSLT不起作用 以下是原始XML输出: <newsItem> <!DOCTYPE xsl:stylesheet[ <!ENTITY bull "&#8226;"> ]> <inlineXml> <h2>App

我的XML有一些奇怪的结构。它是由驱动网站的CMS生成的,但我们需要使用数据库的XML输出在Adobe InDesign中创建打印文档

我需要选择一些包含在span标记中的内容,这些span标记具有特定的类,但我的XSLT不起作用

以下是原始XML输出:

<newsItem>
<!DOCTYPE xsl:stylesheet[
<!ENTITY bull   "&#8226;">
]>
<inlineXml>
  <h2>Appointments</h2>
<p><span class="PB-biz red bullet">&bull;</span> <span><strong>John Smith</strong></span> interim president and CEO was named to the permanent     position.</p>    
<p><span class="PB-biz red bullet">&bull;</span> Hospital announced that <span><strong>James Williams</strong></span> will become division president .</p>
</inlineXml>
</newsItem>

约会
&公牛约翰·史密斯临时总裁兼首席执行官被任命为永久职位。

&公牛;医院宣布詹姆斯·威廉姆斯将担任科长

以下是XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform version="1.0">
<xsl:output method="xml" indent="no"/>
<xsl:strip-space elements="*"/>

<xsl:template match="newsItem"> <newsItem><xsl:apply-templates/></newsItem></xsl:template>
<xsl:template match="p">
<p><xsl:apply-templates/></p>
</xsl:template>

<xsl:template match="span[@class='PB-biz']">
<bull><xsl:apply-templates/></bull>">
</xsl:template>

<xsl:template match="span/strong"><xsl:text> </xsl:text><biz-name><xsl:value-of select="normalize-space(.)"/></biz-name><xsl:text> </xsl:text></xsl:template>
</xsl:stylesheet>

以下是所需的输出:

<newsItem>
<inlineXml>
<h2>Appointments</h2>
<p><bull>&bull;</bull> <biz-name>John Smith</biz-name> interim president and CEO was named to the permanent position.</p>    
<p><bull>&bull;</bull> Hospital announced that <biz-name>James Williams</biz-name> will become division president.</p>
</inlineXml>
</newsItem>

约会
&公牛;约翰·史密斯临时总裁兼首席执行官被任命为永久职位。

&公牛;医院宣布詹姆斯·威廉姆斯将担任科长

我无法使所选内容适用于项目符号实体元素


谢谢

您的XML类是“PB biz red bullet”。你在“PB biz”课上比赛。因为它们不一样,所以它不匹配。更改XSLT以匹配类的精确属性值。

这是您的精确完整的XML输入吗?不能使用像
这样的实体&bull在XML中,但没有先声明它。对不起,它在XML中,但我没有显示它。源代码现在已更正,所以您必须使用所有三个类?我以前从未见过这种情况。您是否将它们写成带有句点的CSS格式,比如PB-biz.red.bullet?还是只留下空间?我用空间试过了,成功了。真是好笑。因此,当选择具有多个类的节点时,无法仅在一个类上匹配它?事实上。。。XSLT不是CSS。因此,在编写匹配项时,需要指定完整的属性值。您可能要做的是检查class属性是否存在,并对模板本身进行包含检查。@JimMaivald在XML中,属性只包含一个值。可以使用contains()函数匹配部分值,但除非格外小心,否则很容易得到误报。数据提供程序不应在单个属性中放置多个值,而应使用多个元素。