xslt-1.0 - 使用 XSLT 从 xml 中提取某些属性名称及其值
问题描述
我不是 XSLT 方面的专家,需要帮助。我们正在从 ecomm express 物流中提取 AWB 状态。他们提供数据的 xml 结构是 django 序列化的 xml 格式。我们只想从此 xml 中选择所需的数据。试图提取属性名称及其值,但它没有提供所需的输出。
下面是输入结构
<ecomexpress-objects version="1.0">
<object pk="1" model="awb">
<field type="BigIntegerField" name="awb_number">700054480</field>
<field type="CharField" name="orderid">5012</field>
<field type="FloatField" name="actual_weight">0.5</field>
<field type="CharField" name="origin">DELHI-DSW</field>
<field type="CharField" name="destination">DELHI-DLN</field>
<field type="CharField" name="customer">Ecom Express Private Limited - 32012</field>
<field type="CharField" name="consignee">MUKESH KUMAR GUPTA</field>
<field type="CharField" name="pickupdate">11-Feb-2013</field>
<field type="CharField" name="status">Delivered / Closed</field>
<field type="CharField" name="reason_code"/>
<field type="CharField" name="reason_code_description"/>
<field type="CharField" name="reason_code_number">999</field>
<field type="CharField" name="receiver">mukesh 9999488339</field>
<field type="CharField" name="expected_date">12-Feb-2013</field>
<field type="CharField" name="last_update_date">05-Apr-2013</field>
<field type="CharField" name="delivery_date">2013-02-17 11:26:00</field>
<field type="CharField" name="ref_awb">None</field>
<field type="CharField" name="rts_shipment"/>
<field type="CharField" name="system_delivery_update">2013-02-17 11:26:00</field>
<field type="CharField" name="rts_system_delivery_status"/>
</object>
<object pk="2" model="awb">
<field type="BigIntegerField" name="awb_number">700054482</field>
<field type="CharField" name="orderid">5014</field>
<field type="FloatField" name="actual_weight">0.5</field>
<field type="CharField" name="origin">DELHI-DSW</field>
<field type="CharField" name="destination">DELHI-DLN</field>
<field type="CharField" name="customer">Ecom Express Private Limited - 32012</field>
<field type="CharField" name="consignee">MUKESH KUMAR GUPTA</field>
<field type="CharField" name="pickupdate">11-Feb-2013</field>
<field type="CharField" name="status">Delivered / Closed</field>
<field type="CharField" name="reason_code"/>
<field type="CharField" name="reason_code_description"/>
<field type="CharField" name="reason_code_number">999</field>
<field type="CharField" name="receiver">mukesh 9999488339</field>
<field type="CharField" name="expected_date">12-Feb-2013</field>
<field type="CharField" name="last_update_date">05-Apr-2013</field>
<field type="CharField" name="delivery_date">2013-02-17 11:26:00</field>
<field type="CharField" name="ref_awb">None</field>
<field type="CharField" name="rts_shipment"/>
<field type="CharField" name="system_delivery_update">2013-02-17 11:26:00</field>
<field type="CharField" name="rts_system_delivery_status"/>
</object>
</ecomexpress-objects>
预期的输出结构是
<ecommexpress>
<awb>
<awb_number>700054480</awb_number>
<orderid>5012</orderid>
.
.
.
.
.
</awb>
<awb>
<awb_number>700054482</awb_number>
<orderid>5014</orderid>
.
.
.
.
.
</awb>
</ecommexpress>
AWB Number 可能会多次出现。所以嵌套结构是预期的。
我的系统只接受 XSLT 1.0。请帮忙。
问候,
斯基阿努普
解决方案
使用下面的代码
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:template match="ecomexpress-objects">
<ecommexpress><xsl:apply-templates/></ecommexpress>
</xsl:template>
<xsl:template match="object[@model = 'awb']">
<awb><xsl:apply-templates/></awb>
</xsl:template>
<xsl:template match="field[@name]">
<xsl:element name="{@name}"><xsl:apply-templates/></xsl:element>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- ruby-on-rails - 在 Rails 中限制每个用户的后台工作人员数量
- java - 如何将四个图像中的一个随机分配给一个字段
- kubernetes - Kubernetes:自定义 Pod 调度和 Volume 调度
- javascript - React,根据父组件和两个子组件之间的通信有条件地渲染组件
- c# - 使用 terminal.gui 时 C# 找不到对象引用
- java - Java倒数计时器重置问题
- android - Android HTTP 方法 Rest API
- java - 如何在搜索请求中添加多个术语聚合?
- python - 在字典上加载多个 Pandas 数据帧时会消耗大量内存
- php - sql模式只有full group by