我有以下XML代码:
<root>
<Kursstamm>
<Texteinmischdefinitionen>
<Texteinmischung Typ="Text" Position="Vorlauftext">Text A</Texteinmischung>
</Texteinmischdefinitionen>
<KursstammID>Text B
</KursstammID>
<Kursstammtitel>Text C</Kursstammtitel>
<Kurztext>Text D</Kurztext>
<Kursgebühr>Price</Kursgebühr>
<Trainerprosa>Text E</Trainerprosa>
<Texteinmischdefinitionen>
<Texteinmischung Typ="Text" Position="Hinweistext">Text F </Texteinmischung>
</Texteinmischdefinitionen>
</Kursstamm>
</root>
我喜欢用XSLT处理它:
Text A
Text B
Text C
Text D
Text E
Text F
我遇到文字A和文字F的问题!
我使用这个XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="/root/Kursstamm">
<xsl:copy-of select="Texteinmischung[@Typ='Vorlauftext']" />
<xsl:copy-of select="KursstammID"/>
<xsl:copy-of select="Kurztext"/>
<xsl:copy-of select="Kursgebühr"/>
<xsl:copy-of select="Trainerprosa"/>
<xsl:copy-of select="Nachlauf"/>
<xsl:copy-of select="Texteinmischung[@Typ='Hinweistext']" />
</xsl:template>
</xsl:stylesheet>
但它没有找到
<Texteinmischung Typ="Text" Position="Vorlauftext">
或
<Texteinmischung Typ="Text" Position="Hinweistext">
如何获取带有属性的标签?
感谢您的帮助!
答案 0 :(得分:1)
对于有问题的副本,请尝试:
<xsl:copy-of select=".//*[@Typ]" />
(因为那时的上下文节点是Kursstamm元素,并且为了获取具有“Typ”属性的Texteinmischung,你需要更深入地了解Kursstamm的后代轴,而不仅仅是获得它的直接子项;因此使用“ .//*“在那种情况下”
“HTH,
答案 1 :(得分:1)
YSharp已经为您解答了您的特定问题,但您可能有兴趣知道还有另一种方法可以利用XSLT的built-in templates rules。如果只需要输出各种文本节点,只需要一个匹配文本节点的模板,在该模板中输出带有换行符的文本。
试试这个XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*" />
<xsl:template match="text()">
<xsl:value-of select="normalize-space()" />
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
请注意,使用xsl:strip-space
忽略仅限空格的节点。
如果您想忽略某些元素,例如Kursgebühr
,只需添加一个额外的模板:
<xsl:template match="Kursgebühr" />