这是我的XML输入,无法更改并来自RSS提要 在输出中,命名空间被复制到我不想要的每个Item节点。我怎么摆脱这个?
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:hr="http://www.w3.org/2000/08/w3c-synd/#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cb="http://www.centralbanks.org/rss/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<item rdf:about="/News-and-Publications/Media-Releases/2018/Chaly-Mah-joins-MAChairman.aspx">
<title>Chaly Mah joins MAS Board of Directors; n</title>
<link>http://www.mas.gov.sg/News-and-Publications/Media-Releases/2018/Chaly-Mah-joins-MAS-Board-of-Directors-DPM-Tharman-re-appointed-as-Chairman.aspx</link>
<dc:date>2018-04-20 10:13 AM</dc:date>
<description></description>
<cb:news>
<cb:simpleTitle>Chaly Mah joins MAS Board of Directors; </cb:simpleTitle>
<cb:occurenceDate>2018-04-20 10:13 AM</cb:occurenceDate>
</cb:news>
</item>
<item>
</item>
</rdf:RDF>
我创建的XSLT是:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
exclude-result-prefixes="rdf">
<xsl:output method="xml" indent="yes" />
<xsl:template match="rdf:RDF">
<Records>
<xsl:apply-templates/>
</Records>
</xsl:template>
<xsl:template match="item">
<xsl:element name="Record">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
在输出中,命名空间被复制到我不想要的每个Item节点。我怎么摆脱这个?
<item xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
rdf:about="/News-and-Publications/Media-Releases/2018/Chaly-Mah-joins-MAS-Board-of-Directors-DPM-Tharman-re-appointed-as-Chairman.aspx">
<?xml version="1.0" encoding="UTF-8"?>
<Records>
<item xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
rdf:about="/News-and-Publications/Media-Releases/2018/Chaly-Mah-joins-MAS-Board-of-Directors-DPM-Tharman-re-appointed-as-Chairman.aspx">
<title>Chaly Mah joins MAS Board of Directors;</title>
<link>http://www.mas.gov.sg/News-and-Publications/as-Chairman.aspx</link>
<dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2018-04-20 10:13 AM</dc:date>
<description/>
<cb:news xmlns:cb="http://www.centralbanks.org/rss/">
<cb:simpleTitle>Chaly Mah joins MAS Board of Directors; DPM </cb:simpleTitle>
<cb:occurenceDate>2018-04-20 10:13 AM</cb:occurenceDate>
</cb:news>
</item>
答案 0 :(得分:1)
item
使用其命名空间复制节点。
您需要将所有节点和名称空间重命名为其本地名称,而不使用名称空间。这看起来像这样(替换所有节点和属性匹配器)
xmlns="http://purl.org/rss/1.0/"
此外,永远不会调用xmlns:rss="http://purl.org/rss/1.0/"
的匹配器,因为您的XML具有默认的命名空间<xsl:template match="rss:item">
。这意味着XML中没有名称空间前缀的每个元素都是此名称空间的一部分。
因此,您需要在 XSL
中声明此命名空间<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:hr="http://www.w3.org/2000/08/w3c-synd/#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cb="http://www.centralbanks.org/rss/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rss="http://purl.org/rss/1.0/"
exclude-result-prefixes="rdf rdfs hr dc cb rss">
然后将匹配器更改为
if
顺便说一下:如果你想摆脱不再使用的命名空间声明,你必须在XSL中声明命名空间,然后将它们添加到结果排除中
if(number == -1) {
break;
}