如何读取node / element的值,忽略少数子标签。 我有需要忽略的标签列表,
示例:
A) 输出:标题Txt a
<Title>
<Comment>Comment code</Comment>Title Txt a
</Title>
b)中 输出:标题Txt b
<Title>
<Ignore1>Comment code</Ignore1>Title Txt b
</Title>
c)中 输出:注释代码标题Txt c
<Title>
<includethis>Comment code</includethis>Title Txt c
</Title>
答案 0 :(得分:0)
您只需匹配Title
元素:
<xsl:template match="Title">
并输出其文字内容:
<xsl:value-of select="."/>
然后,依次处理子节点:
<xsl:template match="*[parent::Title and starts-with(.,'Ignore')]"/>
<xsl:template match="includethis">
<xsl:value-of select="."/>
</xsl:template>
在上面,第一个模板匹配名称以“忽略”开头的元素。这是因为我假设我可以使用其他名为Ignore2
,Ignore3
的元素等等。
最后,匹配includethis
元素并输出其文本内容,与Title
元素相同。
现在,总结一下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/Title">
<xsl:value-of select="."/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[parent::Title and starts-with(.,'Ignore')]"/>
<xsl:template match="includethis">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
感谢您的帮助。但我错过了提到问题的重要条件,
在开始任何处理之前,我需要检查'标题'是否为空。
下面的示例如果子标记来自忽略列表,则标记为空。
<Title>
<Comment>Comment code</Comment>
</Title>
示例代码:
<xsl:choose>
<xsl:when test="Title and normalize-space(Title) != ''">
<xsl:apply-templates select="Title" mode="xyz"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-templates name="getalternative_label" mode="xyz"/>
</xsl:otherwise>
</xsl:choose>