gpt4 book ai didi

xml - 在 XSL 中,如何根据多个属性选择一个值?

转载 作者:数据小太阳 更新时间:2023-10-29 02:59:25 25 4
gpt4 key购买 nike

这一定是一个非常基本的问题,但我真的很难找到解决方案。当我在 tag="099"code="a" 属性上匹配时,我试图从以下 XML 中提取第一个实例分别在 marc:datafield 节点和 marc:subfield 节点

<?xml version="1.0" encoding="UTF-8" ?>
<marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
<marc:record>
...
<marc:datafield tag="079" ind1=" " ind2=" ">
<marc:subfield code="a">79927839</marc:subfield>
</marc:datafield>
<marc:datafield tag="099" ind1=" " ind2=" ">
<marc:subfield code="a">940002</marc:subfield>
</marc:datafield>
<marc:datafield tag="099" ind1=" " ind2=" ">
<marc:subfield code="a">940002*</marc:subfield>
</marc:datafield>
<marc:datafield tag="099" ind1=" " ind2=" ">
<marc:subfield code="a">940002**</marc:subfield>
...

所以,我正在尝试检索第一个“940002”。使用以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:marc="http://www.loc.gov/MARC21/slim">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/">
<!--identifier-->
<xsl:if test="/marc:collection/marc:record/marc:datafield/@tag='099'">
<xsl:element name="dc:identifier">
<xsl:if test="position()=1">
<xsl:value-of select="/marc:collection/marc:record/marc:datafield/marc:subfield/@code='a'"/>
</xsl:if>
</xsl:element>
</xsl:if>
...

但是,我得到的是:

<?xml version="1.0" encoding="UTF-8"?>
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:marc="http://www.loc.gov/MARC21/slim">
<dc:identifier>true</dc:identifier>
...

而不是想要的:

       <?xml version="1.0" encoding="UTF-8"?>
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:marc="http://www.loc.gov/MARC21/slim">
<dc:identifier>940002</dc:identifier>
...

我猜这一定是 Xpath 问题,但是...任何线索都将不胜感激。

谢谢

最佳答案

使用:

/marc:collection/marc:record/marc:datafield
[@tag='099']/marc:subfield[@code='a'][1]/text()

关于xml - 在 XSL 中,如何根据多个属性选择一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3443571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com