From: Lady <redacted>
Date: Sun, 4 Feb 2024 21:54:35 +0000 (-0500)
Subject: Don’t add attributes to non·elements in parser
X-Git-Tag: 0.6.0~3
X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/7408a0a14e34cdfe3000275e36015abdff9ab631

Don’t add attributes to non·elements in parser

Check to see if it is an element first with `self::*`.
---

diff --git a/lib/catalog2parser.xslt b/lib/catalog2parser.xslt
index ad38990..7791570 100644
--- a/lib/catalog2parser.xslt
+++ b/lib/catalog2parser.xslt
@@ -88,23 +88,30 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
 				<xslt:param name="media-type"/>
 				<xslt:param name="result" select="/.."/>
 				<xslt:for-each select="$result/node()">
-					<xslt:copy>
-						<xslt:if test="string($id)!=''">
-							<xslt:attribute name="书社:parsed-by">
-								<xslt:value-of select="$id"/>
-								<xslt:if test="@书社:parsed-by">
-									<xslt:text> </xslt:text>
-									<xslt:value-of select="@书社:parsed-by"/>
+					<xslt:choose>
+						<xslt:when test="self::*">
+							<xslt:copy>
+								<xslt:if test="string($id)!=''">
+									<xslt:attribute name="书社:parsed-by">
+										<xslt:value-of select="$id"/>
+										<xslt:if test="@书社:parsed-by">
+											<xslt:text> </xslt:text>
+											<xslt:value-of select="@书社:parsed-by"/>
+										</xslt:if>
+									</xslt:attribute>
 								</xslt:if>
-							</xslt:attribute>
-						</xslt:if>
-						<xslt:if test="string($media-type)!=''">
-							<xslt:attribute name="书社:media-type">
-								<xslt:value-of select="$media-type"/>
-							</xslt:attribute>
-						</xslt:if>
-						<xslt:copy-of select="@*[namespace-uri()!='urn:fdc:ladys.computer:20231231:Shu1She4' or local-name()!='parsed-by' and local-name()!='media-type']|node()"/>
-					</xslt:copy>
+								<xslt:if test="string($media-type)!=''">
+									<xslt:attribute name="书社:media-type">
+										<xslt:value-of select="$media-type"/>
+									</xslt:attribute>
+								</xslt:if>
+								<xslt:copy-of select="@*[namespace-uri()!='urn:fdc:ladys.computer:20231231:Shu1She4' or local-name()!='parsed-by' and local-name()!='media-type']|node()"/>
+							</xslt:copy>
+						</xslt:when>
+						<xslt:otherwise>
+							<xslt:copy-of select="."/>
+						</xslt:otherwise>
+					</xslt:choose>
 				</xslt:for-each>
 			</xslt:template>
 			<xslt:template match="/">