如何使用XSLT包含多个XMLNS

时间:2013-07-03 10:19:07

标签: xml xslt contains

这是我们试图操作的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<Pois xmlns="urn:schemas-etourist:Poi">
<Poi PID="1234567">
.......
<Kategorien xmlns="urn:schemas-etourist:SchemaExtension>
    <Kategorie xmlns="">
    <Bezeichnung>Museen</Bezeichnung>
    <Ebene>1</Ebene>
    <KategorieID>28</KategorieID>
    <Kategorie xmlns="">
    <Bezeichnung>Galerie</Bezeichnung>
    <Ebene>2</Ebene>
    <KategorieID>225</KategorieID>
    <Kategorie xmlns="">
    <Bezeichnung>Sammlung</Bezeichnung>
    <Ebene>3</Ebene>
    <KategorieID>56</KategorieID>
</Kategorien>
</Poi>
</Pois>

这是我们的XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:td="urn:schemas-etourist:Poi"
xmlns:td2="urn:schemas-etourist:SchemaExtension"
xmlns:php="http://php.net/xsl"
extension-element-prefixes="php">

<xsl:template match="/td:Pois">
<xsl:apply-templates disable-output-escaping="yes" select="td:Poi/td2:Kategorien/td2:Kategorie[contains(td2:Bezeichnung, 'Museen')]">
<xsl:sort select="td:OBJECT_TEXT_NAME"></xsl:sort>
</xsl:apply-templates>
</xsl:template>

<xsl:template match="td:Poi">
....
</xsl:template>

</xsl:stylesheet>

我们如何让模板只选择“Pois”,其中包含“Museen”的“Kategorie”?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

  

:poi / td2:Kategorien / td2:Kategorie [contains(td2:Bezeichnung,'Museen')]

您的元素Kategorie和Bezeichnung不在命名空间中,因此您应删除"td2:"前缀。

至少,这就是我所假设的。你的Kategorie元素似乎没有任何结束标记,所以某处出了点问题。