如何解决如果属性不存在,则获取节点值
我有一个xml文件,其中包含多个具有相同名称但具有不同属性的元素。
frmBook.FindComponent
我想获取更新的<ns3:ExportMedicines>
<ns3:Jkm code="35897">
<ns3:Data from="2016-10-01" to="2020-07-21">
<ns2:Name>
<Fr>estradiol 1 mg comp + estradiol 1 mg + dydrogestérone 10 mg comp</Fr>
</ns2:Name>
</ns3:Data>
<ns3:Data from="2020-07-22">
<ns2:Name>
<Fr>estradiol 1 mg comp+ estradiol 1 mg + dydrogestérone 10 mg comp</Fr>
</ns2:Name>
</ns3:Data>
</ns3:Jkm>
</ns3:ExportMedicines>
元素。
我正在使用xsl 1.0,所以我已经读过了,我无法测试日期属性。
因此,我认为一种方法是测试属性<ns3:data>
是否不存在。
我不能使用to
,因为我已经在template match
这是我的xsl的摘录:
for-each
任何帮助将不胜感激!
解决方法
(美国)日期值的优点在于,可以在不使用-
字符的情况下进行数字比较。因此,删除它们可以进行数值比较。
我还向您的XML文件和XSLT添加了一些缺少的名称空间,以使答案完整。随意更改名称空间-但同样可以使用XML和XSLT。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<ns3:ExportMedicines xmlns:ns2="http://ns2.com" xmlns:ns3="http://ns3.com">
<ns3:Jkm code="35897">
<ns3:Data from="2016-10-01" to="2020-07-21">
<ns2:Name>
<Fr>estradiol 1 mg comp + estradiol 1 mg + dydrogestérone 10 mg comp</Fr>
</ns2:Name>
</ns3:Data>
<ns3:Data from="2020-07-22">
<ns2:Name>
<Fr>estradiol 2 mg comp+ estradiol 1 mg + dydrogestérone 10 mg comp</Fr>
</ns2:Name>
</ns3:Data>
</ns3:Jkm>
</ns3:ExportMedicines>
XSLT-1.0:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:ns2="http://ns2.com" xmlns:ns3="http://ns3.com">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/ns3:ExportMedicines">
<xsl:for-each select="ns3:Jkm">
<xsl:text>INSERT INTO JKM VALUES ('</xsl:text>
<xsl:value-of select="@code" />
<xsl:text>','</xsl:text>
<xsl:for-each select="ns3:Data">
<xsl:sort select="translate(@from,'-','')" order="descending" data-type="number" />
<xsl:if test="position() = 1">
<xsl:call-template name="escape-apos">
<xsl:with-param name="string" select="ns2:Name" />
</xsl:call-template>
</xsl:if>
<xsl:text>','</xsl:text>
</xsl:for-each>
<xsl:text>','</xsl:text>
<xsl:text>','</xsl:text>
<xsl:text>');</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出为(最新):
INSERT INTO JKM VALUES ('35897','estradiol 2 mg comp+ estradiol 1 mg + dydrogestérone 10 mg comp','','');
此解决方案假定to
与以下from
值之间没有重叠。
IIUC,您想这样做:
<xsl:for-each select="ns3:Jkm">
<!-- omitted -->
<xsl:value-of select="ns3:Data[not(@to)]/ns2:Name/Fr" />
<!-- omitted -->
</xsl:for-each>
这是从没有Data
属性的to
获取值的-我认为这是当前值。
我使用的是xsl 1.0,因此我已经阅读过,无法测试日期属性。
您对此有误。您的日期采用YYYY-MM-DD格式-这意味着它们可以按字母顺序进行排序,而无需进行任何修改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。