<Client>
<Document>
<service class="ABC">
<author name="x"/>
<Details>
...
</Details>
</service>
</Document>
<Document>
<service class="ABC">
<author name="x"/>
<Details>
...
</Details>
</service>
</Document>
<Document>
<service class="ABC">
<author name="x"/>
<Details>
...
</Details>
</service>
</Document>'
</Client>
<Client>
<Document>
<service class="ABC">
<author name="x"/>
<Details>
...
</Details>
</service>
</Document>
<Document>
<service class="ABC">
<author name="x"/>
<Details>
...
</Details>
</service>
</Document>
<Document>
<service class="ABC">
<author name="x"/>
<Details>
...
</Details>
</service>
</Document>'
<component>
<service class="ABC">
<author name="x"/>
</service>
</component>'
</Client>
<xsl:template match="//v3:Client">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<component>
<service class="">
<xsl:apply-templates select="//v3:Client/v3:Document/v3:service/v3:author"/>
</service>
</component>
</xsl:copy>
</xsl:template>
<xsl:template match="//v3:Client/v3:component/v3:service">
<xsl:element name="service" namespace="urn:hl7-org:v3">
<xsl:attribute name="class">
<xsl:value-of select="//v3:Client/v3:Document/v3:service/@class"/>
</xsl:attribute>
</xsl:element>
</xsl:template>
但它没有提供所需的产出。它给出的输出像
Client Document service class="ABC" author name="x" details ... details service Document Document service class="ABC" author name="x" details ... details service Document Document service class="ABC" author name="x" details ... details service Document component service class="" author name="x" service service class="" author name="x" service service class="" author name="x" service component Client
我是XSL的新手。有谁能帮我解决这个问题吗?
如果希望在组件元素中输出不同的服务元素,那么在XSTL1.0中需要使用一种称为Muenchian分组的技术。我假设class属性唯一地标识了一个服务,所以您可以从定义一个键来查找服务开始,如下所示
<xsl:key name="service" match="service" use="@class" />
然后,在创建组件元素时,为了获得不同的服务元素,请查看所有这些元素,但只选择在其给定类属性的键中首先出现的元素。
<xsl:apply-templates
select="Document/service[generate-id() = generate-id(key('service', @class)[1])]"
mode="component" />
在与service元素匹配的模板中,您可以根据需要输出详细信息。在您的示例中,您似乎只需要author元素,而不需要详细信息。
<xsl:template match="service" mode="component">
<xsl:copy>
<xsl:apply-templates select="author|@*"/>
</xsl:copy>
</xsl:template>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="service" match="service" use="@class" />
<xsl:template match="Client">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<component>
<xsl:apply-templates select="Document/service[generate-id() = generate-id(key('service', @class)[1])]" mode="component" />
</component>
</xsl:copy>
</xsl:template>
<xsl:template match="service" mode="component">
<xsl:copy>
<xsl:apply-templates select="author|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<Client>
<Document>
<service class="ABC">
<author name="x"/>
<Details> ... </Details>
</service>
</Document>
<Document>
<service class="ABC">
<author name="x"/>
<Details> ... </Details>
</service>
</Document>
<Document>
<service class="ABC">
<author name="x"/>
<Details> ... </Details>
</service>
</Document>
<component>
<service class="ABC">
<author name="x"/>
</service>
</component>
</Client>
预期结果: 如有任何帮助,我们将不胜感激!
我有一个多节点集群星火集群。我正在使用log4j创建日志。日志只创建集群中的所有节点。它们也是在/tmp目录中创建的,而不是在任何其他目录中创建的。这是
从xml中,我需要获得每个节点的名称和面积。 我知道示例xpath,比如,
问题内容: 我正在一个项目中,用户对我们的代客服务的请求在另一端代客接受请求。 我正在使用Firebase作为后端,并应要求将客户uid保存在“ request”子项上。 当代客接受请求时,客户uid应从“请求”节点移至“进行中”节点。 我怎样才能做到这一点? 问题答案: 我建议使用这个: 这来自以下来源:https : //gist.github.com/katowulf/6099042。我在J
我刚刚开始学习如何使用XML数据格式,并且已经在更新一些数据上陷入了困境。我真的,真的很感谢有人帮我解决这个问题,因为我完全不知道怎么处理这样的问题。 生成一些示例数据的代码: 现在困难的部分来了... 我需要更新“value”节点的值,其中“key”节点的值=“abc”在同一个“parameter”节点中。 正如您所看到的,我的xml中有几个“参数”节点,这些节点没有我可以用来区分它们和确定应该