我有以下两条XML行
<para>
<content-style font-style="bold">abcdefg</content-style> This is out of content-style</para>
<para>
This is out of <content-style font-style="bold">abcdefg</content-style> content-style</para>
这里在第一个XML行中,para
将子节点设为content-style
并且它之间没有任何内容,在第二个XML中有一些文本(或者甚至可以有更多节点)在para
和content-style
之间,我只想知道如何使用XSLT来区分这两种情况。
感谢。
答案 0 :(得分:0)
使用以下输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<para>
<content-style font-style="bold">abcdefg</content-style> This is out of content-style</para>
<para> This is out of <content-style font-style="bold">abcdefg</content-style>
content-style</para>
</root>
尝试以下样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<root>
<this_case><xsl:copy-of select="root/para[node()[1][name()='content-style']]"/></this_case>
<other_case><xsl:copy-of select="root/para[node()[1][name()!='content-style']]"/></other_case>
</root>
</xsl:template>
</xsl:stylesheet>
表达式root/para[node()[1][name()='content-style']]
表示root
元素,其子para
的第一个节点的名称为content-style
。第二个恰恰相反。
由于硬回车被视为文本节点,因此必须使用<xsl:strip-space elements="*"/>
。