在使用XSLT处理RDF文档时,忽略该文档中的多个XML头

在使用XSLT处理RDF文档时,忽略该文档中的多个XML头,xml,xslt,rdf,Xml,Xslt,Rdf,我有一个RDF文档,其中包含多个RDF记录(总共约30000条记录)。文件创建者可能错误地在每条记录之前添加了XML头。看起来是这样的: <?xml version="1.0" ?> <rdf:RDF>...</rdf:RDF> <?xml version="1.0" ?> <rdf:RDF>...</rdf:RDF> <?xml version="1.0" ?> <rdf:RDF>...</r

我有一个RDF文档,其中包含多个RDF记录(总共约30000条记录)。文件创建者可能错误地在每条记录之前添加了XML头。看起来是这样的:

<?xml version="1.0" ?>
<rdf:RDF>...</rdf:RDF>
<?xml version="1.0" ?>
<rdf:RDF>...</rdf:RDF>
<?xml version="1.0" ?>
<rdf:RDF>...</rdf:RDF>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"   
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:oai="http://www.openarchives.org/OAI/2.0/"  
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rss="http://my.netscape.com/rdf/simple/0.9/"
  xmlns="http://ands.org.au/standards/rif-cs/registryObjects"
  exclude-result-prefixes="xs xsi xsl oai rdf rss">

  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

  <OAI-PMH 
    xmlns="http://www.openarchives.org/OAI/2.0/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">

    <xsl:template match="/">
      <xsl:apply-templates select="rdf:RDF/rss:Researcher" />
    </xsl:template>

    <xsl:template match="rdf:RDF/rss:Researcher">
      <oai:Researcher>
        <xsl:value-of select="rss:title" />
      </oai:Researcher>
    </xsl:template>

  </OAI-PMH>
</xsl:stylesheet>
我的测试人行横道如下所示:

<?xml version="1.0" ?>
<rdf:RDF>...</rdf:RDF>
<?xml version="1.0" ?>
<rdf:RDF>...</rdf:RDF>
<?xml version="1.0" ?>
<rdf:RDF>...</rdf:RDF>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"   
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:oai="http://www.openarchives.org/OAI/2.0/"  
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rss="http://my.netscape.com/rdf/simple/0.9/"
  xmlns="http://ands.org.au/standards/rif-cs/registryObjects"
  exclude-result-prefixes="xs xsi xsl oai rdf rss">

  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

  <OAI-PMH 
    xmlns="http://www.openarchives.org/OAI/2.0/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">

    <xsl:template match="/">
      <xsl:apply-templates select="rdf:RDF/rss:Researcher" />
    </xsl:template>

    <xsl:template match="rdf:RDF/rss:Researcher">
      <oai:Researcher>
        <xsl:value-of select="rss:title" />
      </oai:Researcher>
    </xsl:template>

  </OAI-PMH>
</xsl:stylesheet>


是否有可能忽略这些标题?我使用xsltproc来应用人行横道。

XSLT处理器对格式良好的XML非常坚决,而您的原始版本则不然。尝试使用通用脚本(Java、PHP、Python)打开文本文件并删除重复的标题。当然,从文本编辑器中删除
XMLProlog
会更简单。然后可以应用
xslt
。顺便说一句,不确定您的用例是需要自动还是只需要一次,并且很乐意通过您选择的文本编辑器进行编辑。另外值得注意的是,即使删除重复的标题,您的文件仍然不是合法的XML,因为它仍然有多个根元素。是的,我最终创建了一个Java程序,将rdf拆分为多个xml