Xml XSLT转换不';t访问Islandora MODS到DC转换中没有文本内容的节点(其属性)
我在Islandora(Drupal)工作,转换一些元数据(MOD到都柏林核心DC),并在XML上使用XSLT转换 XML如下所示:Xml XSLT转换不';t访问Islandora MODS到DC转换中没有文本内容的节点(其属性),xml,xslt,drupal,islandora,Xml,Xslt,Drupal,Islandora,我在Islandora(Drupal)工作,转换一些元数据(MOD到都柏林核心DC),并在XML上使用XSLT转换 XML如下所示: <mods:mods> <mods:extension> <mads:madsCollection> <mads:mads> ... <mads:topic lang="hrv" valueURI="
<mods:mods>
<mods:extension>
<mads:madsCollection>
<mads:mads>
...
<mads:topic lang="hrv" valueURI="http://www.ncbi.nlm.nih.gov/mesh/D000349">Afrika</mads:topic>
<mads:topic lang="eng">Africa</mads:topic>
...
</mads:mads>
<mads:mads>
...
<mads:topic lang="hrv" valueURI="http://www.ncbi.nlm.nih.gov/mesh/D005060">Europa</mads:topic>
<mads:topic lang="eng">Europe</mads:topic>
...
</mads:mads>
<mads:mads>
...
<mads:topic lang="hrv" valueURI="http://www.ncbi.nlm.nih.gov/mesh/D001208" />
<mads:topic lang="eng">Asia</mads:topic>
...
</mads:mads>
<mads:mads>
...
<mads:topic lang="hrv" valueURI="http://www.ncbi.nlm.nih.gov/mesh/D001315">Australia</mads:topic>
<mads:topic lang="eng"/>
...
</mads:mads>
</mads:madsCollection>
</mods:extension>
</mods:mods>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mods="http://www.loc.gov/mods/v3" exclude-result-prefixes="mods"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:mads="http://www.loc.gov/mads/v2"
xmlns:srw_dc="info:srw/schema/1/dc-schema"
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"/>
<xsl:template match="/">
<!-- WS: updated schema location -->
<xsl:for-each select="mods:mods">
<oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<xsl:apply-templates/>
</oai_dc:dc>
</xsl:for-each>
</xsl:template>
<xsl:template match="/mods:mods/mods:extension/mads:madsCollection">
<xsl:apply-templates select="mads:mads/mads:topic" />
</xsl:template>
<xsl:template match="mads:mads/mads:topic">
<dc:subject>
<xsl:attribute name="xml:lang">
<xsl:value-of select="@lang" />
</xsl:attribute>
<xsl:value-of select="@valueURI" />
</dc:subject>
</xsl:template>
</xsl:stylesheet>
<oai_dc:dc xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D000349</dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D005060</dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D001208</dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D001315</dc:subject>
</oai_dc:dc>
为什么这个不见了
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D001208</dc:subject>
http://www.ncbi.nlm.nih.gov/mesh/D001208
好吧,我用XML测试了XSLT,结果很好。然而,为了完善结果,需要进行一次修改:
要仅选择包含valueURI
属性的元素,必须添加谓词
<xsl:template match="/mods:mods/mods:extension/mads:madsCollection">
<xsl:apply-templates select="mads:mads/mads:topic[@valueURI]" />
</xsl:template>
应用此修改后的结果是:
<?xml version="1.0" encoding="UTF-8"?><oai_dc:dc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:mads="http://www.loc.gov/mads/v2" xmlns:srw_dc="info:srw/schema/1/dc-schema" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D000349 </dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D005060 </dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D001208 </dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D001315 </dc:subject>
</oai_dc:dc>
http://www.ncbi.nlm.nih.gov/mesh/D000349
http://www.ncbi.nlm.nih.gov/mesh/D005060
http://www.ncbi.nlm.nih.gov/mesh/D001208
http://www.ncbi.nlm.nih.gov/mesh/D001315
附言:我刚刚将您的输入XML放入XSLT处理器。输出符合您的要求。输出中没有缺少任何元素 您的问题是否显示了您遇到问题的确切XML?XSLT正在寻找一个名为
mods
(在mods
名称空间中)的根元素,但这在XML中不存在。XML被缩减为有问题的部分,XSLT是完整的!我认为XML的其他部分没有问题,因为XSLT通常访问并输出它们。问题是在访问这个没有文本内容的兄弟姐妹时,我怀疑Islandora在转换之前杀死了其中一个模块中的元素,但我不知道确切的位置,很抱歉读到这个消息。我不知道Islandora
或它的机构或组织使用它。我的回答只是确认您的输入XML由标准的conform XSLT处理器(在我的例子中是SaxonB)正确处理。如果XSLT处理器给出了不同的结果,那么可能是有缺陷的,因为Saxon基本上是标准的。
<?xml version="1.0" encoding="UTF-8"?><oai_dc:dc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:mads="http://www.loc.gov/mads/v2" xmlns:srw_dc="info:srw/schema/1/dc-schema" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D000349 </dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D005060 </dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D001208 </dc:subject>
<dc:subject xml:lang="hrv">http://www.ncbi.nlm.nih.gov/mesh/D001315 </dc:subject>
</oai_dc:dc>