【发布时间】:2016-06-09 09:36:02
【问题描述】:
查询是获取第一个子元素的值,对应的父元素应该有多个子元素。
在这里,棘手的问题是父元素和子元素是动态生成的。即我们不知道父母和孩子的名字
这是 XML 输入:
<PageTwo>
<List25>No</List25>
<List11>Air Gun|Gun</List11>
<Multilist02>
<Value>.204</Value>
<Value>.22</Value>
<Value>.243</Value>
</Multilist02>
<Multilist05>
<Value>Air Gun|NOS|NOS</Value>
<Value>Optic|Binocular|ZULU5</Value>
</Multilist05>
<List23>DAK</List23>
<Text01>NA</Text01>
<List13>EA</List13>
<List26>No</List26>
<List07>IN</List07>
<List08>LB</List08>
</PageTwo>
在上述 XML 中,Multilist 包含多个子值,必须提取第一个具有 Value 的子元素
样本[例外]输出
<Multilist02>
<Value>.204</Value>
</Multilist02>
<Multilist05>
<Value>Air Gun|NOS|NOS</Value>
</Multilist05>
正如我之前所说,在传入的 xml 中,我们不知道父元素和子元素的名称。
我在 XSLT 下尝试并能够提取第一个子元素,但无法用相应的父元素覆盖子元素
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.oracle.com/webfolder/technetwork/xml/plm/2014/08/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.oracle.com/webfolder/technetwork/xml/plm/2014/08/ http://www.oracle.com/webfolder/technetwork/xml/plm/2014/08/aXML.xsd">
<xsl:template match="/">
<xsl:for-each select="/PageTwo/*">
<xsl:for-each select="*">
<xsl:variable name="i" select="position()" />
<xsl:if test="$i = 1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
生成的输出是:
<?xml version="1.0" encoding="UTF-8"?><Value>.204</Value><Value>Air Gun|NOS|NOS</Value>
请帮我解决这个问题
编辑:下面的答案解决了我接受作为答案的上述问题
在上述 XML 输入文件上再添加一个查询,并将属性添加到根节点。
新输入:为根节点添加属性
<PageTwo xmlns="http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/ http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/aXML.xsd" creator="admin, nawaz(nawaz)">
<List25>No</List25>
<List11>Air Gun|Gun</List11>
<Multilist02>
<Value>.204</Value>
<Value>.22</Value>
<Value>.243</Value>
</Multilist02>
<Multilist05>
<Value>Air Gun|NOS|NOS</Value>
<Value>Optic|Binocular|ZULU5</Value>
</Multilist05>
<List23>DAK</List23>
<Text01>NA</Text01>
<List13>EA</List13>
<List26>No</List26>
<List07>IN</List07>
<List08>LB</List08>
</PageTwo>
假设我想用他们的名字解析元素,而不是在下面的解决方案中指定*,我接受作为答案
当前答案
<xsl:template match="/">
<xsl:apply-templates select="*/*[*[2]]"/>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@* | *[1]"/>
</xsl:copy>
</xsl:template>
当根节点中不存在属性时,即使我也可以通过指定相应名称来解析元素。但是我想用根节点属性来解析元素的名字来显示
例外解决方案
<?xml version="1.0" encoding="UTF-8"?><PageTwo xmlns="http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/ http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/aXML.xsd" creator="admin, nawaz(nawaz)">
<Multilist02>
<Value>.204</Value>
</Multilist02>
<Multilist05>
<Value>Air Gun|NOS|NOS</Value>
</Multilist05>
</PageTwo>
条件解析元素名称
【问题讨论】:
-
<Multilist02> <Value>.204</Value> </Multilist02> <Multilist05> <Value>Air Gun|NOS|NOS</Value> </Multilist05>是你想要的完整输出,没有其他元素,没有根元素吗? -
@MartinHonnen 是的,我只想要
.204 Air Gun|NOS|NOS