我需要解析以下節點:XSLT 2.0處理無效節點混合文本和CDATA
<media:keywords>keyword1,keyword2<![CDATA[keyword3]]></media:keywords>
成有效的串,優選「關鍵字1,關鍵字2,KEYWORD3」,但我會滿足於完全除去CDATA。
試圖訪問該節點給我的文字「keyword1,keyword2keyword3」,我不能告訴CDATA開始的地方。
原始的XML(簡化mRSS資訊版)
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<item>
<media:keywords>keyword1,keyword2<![CDATA[keyword3]]></media:keywords>
</item>
</channel>
</rss>
XSL(簡體):
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:media="http://search.yahoo.com/mrss/" exclude-result-prefixes="xs xsi fn">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="/">
<test>
<xsl:variable name="items" select="/rss/channel/item"/>
<xsl:for-each select="$items">
<xsl:variable name="mediakw" select="media:keywords"/>
<xsl:element name="mediaKeyWords">
<xsl:value-of select="$mediakw"/>
</xsl:element>
</xsl:for-each>
</test>
</xsl:template>
</xsl:stylesheet>
和輸出:
<test xmlns:media="http://search.yahoo.com/mrss/"><mediaKeyWords>keyword1,keyword2keyword3</mediaKeyWords></test>
非常感謝!
如果您分別使用Saxon和XSLT 2.0處理器的Java實現,請查看將http://andrewjwelch.com/lexev/插入到處理鏈中,這樣可以將CDATA部分更改爲標記,然後XSLT處理器可以操作。 – 2010-11-16 17:54:24