我有一个xml文档
<?xml version="1.0" encoding="UTF-16"?>
<APIDATA xmlns="api-com">
<ORDER EngineID="1" OrderID="66" OtherInfo="100"><INSTSPECIFIER InstID="27" SeqID="17"/>
</ORDER>
<ORDER EngineID="2" OrderID="67" OtherInfo="200"><INSTSPECIFIER InstID="28" SeqID="18"/>
</ORDER>
<ORDER EngineID="3" OrderID="68"><INSTSPECIFIER InstID="29" SeqID="19"/></ORDER>
</APIDATA>
如何使用xpath获取OtherInfo属性的值 但是当它不存在时我想要Null返回
如果我使用以下xpath / APIDATA / ORDER / @ OtherInfo,我得到的输出为
100
200
但是因为对于OrderID 68,缺少OtherInfo我想要输出
100
200
0
这里有一篇贴近我的解决方案的帖子,但我不知道怎么能让它起作用 Can I create a value for a missing tag in XPath?
答案 0 :(得分:0)
不幸的是,只有从给定的XML文档中只返回一个值时,对链接问题的回答方法才有效(请参阅下面有关此点的演示)。因此,鉴于此问题中发布的XML示例,简短的回答是 这不能使用纯XPath 1.0 完成。
如果在编程语言中使用XPath,一种可能的方法是使用始终返回值的XPath表达式,例如/APIDATA/ORDER
。然后,对于返回的每个<ORDER>
元素,通常有很多选项可以获取OtherInfo
属性,并在找不到属性时提供默认值。
将链接后的方法应用于您的案例将导致以下XPath表达式:
substring(concat("0", //ORDER[3]/@OtherInfo), 2 * number(boolean(//ORDER[3]/@OtherInfo)))
XPath在应用于没有属性0
的第3个<ORDER>
元素时成功返回OtherInfo
,请参阅演示*:xpathtester
,{{ 3}}
默认命名空间已在演示中删除
根据要求在XSLT 1.0中实现相同的方法:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="api-com">
<xsl:output method="text" indent="yes"/>
<xsl:template match="d:ORDER">
<xsl:value-of select="substring(concat('0', @OtherInfo), 2 * number(boolean(@OtherInfo)))"/>
</xsl:template>
</xsl:stylesheet>
输出:
100
200
0
演示:xpatheval